我有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();
}
}
我也在Highschool的计算机科学1,如果我的代码不好,请告诉我如何改进,谢谢。
答案 0 :(得分:6)
变量阴影是你的问题。
double average = sum/count;
请删除double
。
强制浮点除法
average = sum/(double)count;
类似问题出现在sumDigits()
此外,您可以完全删除private double average
,因为它是一个计算值。
public double averageDigits()
{
return sum/(double)count;
}
在output
方法中使用该方法而不是average
答案 1 :(得分: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;
}
答案 2 :(得分: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()
为您提供IntSummaryStatistics对象