2016-05-12 45 views
1

我有2个类,DigitMath.java和DigitMathRunner.java,实验所需的设置使用DigitMathRunner作为DigitMath的启动程序。从我的平均值/输出返回0.0's返回

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

> > 

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

} 

和下一个代码块是转轮的代码。

//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高中,如果我的代码是坏的,请告诉我如何改进,谢谢。

回答

6

可变阴影是你的问题。

double average = sum/count; 

请删除double

,并迫使浮点除法

average = sum/(double)count; 

类似的问题在sumDigits()

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

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

,并使用该方法output方法,而不是average

+4

'sum /(1.0)* count;' - better'sum /(double)count;' – Thomas

+0

我忘记了一些括号,所以看起来更干净 –

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; 
} 
0

你也可以改变你的代码和使用流。 (只想提及它,你可以用不同的方式解决问题)

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

给你一个IntSummar y统计对象