从我的平均值/输出返回 0.0



我有两个类,DigitMath.java和DigitMathRunner.java,实验室需要的设置使用DigitMathRun作为DigitPath的启动器。

我的代码的目的是显示数字的平均值,然后将其输出为一个句子。编译器没有给出错误,但输出如下。

> > 
run DigitMathRunner
234 has a digit average of 0.0
10000 has a digit average of 0.0
111 has a digit average of 0.0
9005 has a digit average of 0.0
84645 has a digit average of 0.0
8547 has a digit average of 0.0
123456789 has a digit average of 0.0
> 

这是DigitMath.java 的代码

import static java.lang.System.*;
public class DigitMath
 {
  private int number;
  private int count;
  private int s;
  private int sum;
  private int input;
  private double average;

   public DigitMath()
 {
  number = 0;
  sum=0;
  count = 0;
  input = 0;
 }

  public DigitMath(int s)
  {
    number = s;
    input = s;
  }

   public void setNums(int s)
  {
     number = s;
     input = s;
  }

   public int sumDigits()
  {
     int sum=0;
     while(input > 0)
   { 
    sum += input % 10;
    input /= 10;
   }
     return sum;
  }

 public int countDigits()
 {
   count = (int)(Math.log10(number)+1);
   return count;
 }

 public double averageDigits()
 {
  double average = sum/count;
  return average; 
 }

 public int output()
 {
   System.out.println(""+number +" has a digit average of "+""+average);
   return number;
 }
 }

下一个代码块是Runner。

//Name - Seth Garcia
//Date - 5/12/16
//Class - 3rd Period Monaghan
//Lab  - DigitMath
import static java.lang.System.*;
public class DigitMathRunner
{
 public static void main( String args[] )
{
   DigitMath test = new DigitMath();
      test.setNums(234);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
      test.setNums(10000);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
      test.setNums(111);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
      test.setNums(9005);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
      test.setNums(84645);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
      test.setNums(8547);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
      test.setNums(123456789);
      test.sumDigits();
      test.countDigits();
      test.averageDigits();
      test.output();
 }
}

此外,我在高中计算机科学一年级,如果我的代码不好,请告诉我如何改进,谢谢。

变量阴影是您的问题。

double average = sum/count;

请移除double

并强制浮点除法

average = sum/(double)count;

sumDigits() 中也存在类似问题

此外,您可以完全删除private double average,因为它是一个计算值。

public double averageDigits()
{
    return sum/(double)count;
}

并在output方法中使用该方法而不是average

您需要在sumDigits()averageDigits()中使用类的成员,而不是使用局部变量:

public int sumDigits()
  {
   sum=0;
   while(input > 0)
   { 
    sum += input % 10;
    input /= 10;
   }
     return sum;
  }
public double averageDigits()
 {
  average = (double)sum/count;
  return average; 
 }

您还可以更改代码并为此使用流。(只想提一提,你可以用不同的方式解决问题)

IntSummaryStatistics summaryStatistics = String.valueOf(number).chars().map(i -> i - '0').summaryStatistics();     
    System.out.println(summaryStatistics.getAverage());

String.valueOf(number) 

生成一个字符串的数字

.chars()

生成字符串的字符流(作为int值)

.map(i -> i - '0')

减去"0"的intvalue

.summaryStatistics()

为您提供IntSummaryStatistics对象

最新更新