【问题标题】:0.0's returned from my Average/Output从我的平均/输出返回 0.0
【发布时间】:2016-05-12 13:24:53
【问题描述】:

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

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

> > 

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();
 }
}

我也是高中计算机科学1,如果我的代码不好,请告诉我如何改进,谢谢。

【问题讨论】:

    标签: java double average


    【解决方案1】:

    可变阴影是您的问题。

    double average = sum/count;
    

    请删除double

    并强制浮点除法

    average = sum/(double)count;
    

    类似的问题在sumDigits()

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

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

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

    【讨论】:

    • sum/(1.0)*count; - 更好的sum/(double)count;
    • 我忘记了一些括号,所以看起来确实更干净
    【解决方案2】:

    你需要在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; 
     }
    

    【讨论】:

      【解决方案3】:

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

      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'的int值

      .summaryStatistics()
      

      给你一个 IntSummaryStatistics 对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多