具体来说,在while循环中有一些逻辑区域不允许程序正确流动。我已经走完了这个循环,它应该工作。我遇到的一些错误是当我输入“0”时它不会立即退出,换句话说我必须按两次0这对我没有意义,除非我没有正确理解while循环。另一个错误是在我的add()方法中,我输入它只告诉我输入的第一个数字。所以我相当肯定错误在我的循环中,但我无法看到逻辑错误的来源。任何帮助将不胜感激,谢谢。
import javax.swing.JOptionPane;
public class RandyGilmanP2 {//Begin class
public static void main(String[] args) {//Begin main
JOptionPane.showMessageDialog(null, "Hello Welcome to Sum and Average"
+ "\n of a Number Calculator Program"
+ "\n By: Randy Gilman");
//Declare variables
float add = 0;//used to store the sum of the numbers inputed
float numb = input();//used to store the value of Input() method
float average;
int count = 0;// Used as a counter variable
//Loop that will be controlled by a sentenil value
while (numb != 0) {//Begin for loop
count += 1;
//Call Input method
input();
numb = input();
//Method to find the sum of all the numbers inputed
sum(add,numb);
add = sum(add,numb);
//Used to find the average of all the numbers entered (sum / count)
}//End for loop
avg(add,count);
average = avg(add,count);//used to store the average of the numbers
Results(count,add,average);
}//End Main
public static float input(){//Begin Method
//Will keep gathering input from user until input is equal to 0
String NumberString = JOptionPane.showInputDialog("Enter a floating point number"
+ "(The program ends when 0 is entered):");
//Convert string to float
float number = Float.parseFloat(NumberString);
return number;
}//End Method
public static float sum(float sum, float numb2){//Begin method
//Add number to the previous number to compute total
sum += numb2;
if (sum > 100)
JOptionPane.showMessageDialog(null, "***WARNING***" + "\n The sum of your numbers exceed 100");
return sum;
}//End Method
public static float avg(float num1, float num2){
//Declare variables
float result;
//Preform calculation of average
result = num1 / num2;
return result;
}//End Method
public static void Results(int counter, float addition, float aver){//Begin method
//Declare variables
JOptionPane.showMessageDialog(null,"The total amount of numbers you entered are: " + counter);
JOptionPane.showMessageDialog(null,"The sum of the numbers you have entered is: " + addition);
JOptionPane.showMessageDialog(null,"The average of the numbers you have entered is: " + aver);
}//End Method
}//End Class
答案 0 :(得分:4)
这是我认为你不想要的东西:
//Call Input method
input();
numb = input();
两次这样做会导致要求两次数字 - 但只使用第二次......
另外,要非常小心浮点数和相等性。 0是一个很好的数字,但其他数字,尤其是分数不是那么明显......
除此之外,代码似乎还不错......
(并且您没有“添加”方法)
答案 1 :(得分:2)
您要求输入然后将其扔掉
//in the initialization you do:...
float numb = input();//used to store the value of Input() method
//and in the loop you do it again, overwrite the first input
numb = input();
你应该只在序言中声明麻木,并将其余的留在循环中。
循环中的问题
看看你的循环,我看到了以下问题:
while (numb != 0) {//Begin for loop
count += 1;
//Call Input method
input(); <<-- 1. should be removed, input goes nowhere
numb = input();
//Method to find the sum of all the numbers inputed
sum(add,numb); <<-- 2. should be removed, output goes nowhere
add = sum(add,numb);
//Used to find the average of all the numbers entered (sum / count)
}//End for loop
avg(add,count); <<-- 3. why do you keep repeating??
average = avg(add,count);//used to store the average of the numbers
虽然java允许你调用函数(返回一个值),好像它们是程序(不返回任何名称void
),但只有在你对返回值不感兴趣时才应该这样做。 />
在这种情况下,您将调用该函数两次
第一个呼叫要求用户输入然后将结果抛出,第二个呼叫再次询问用户然后存储答案。
因为你是在循环中运行,所以很难将重复与运行两次的循环区分开来 你永远不必再调用一次函数,就像你在循环中一样。
您无需事先宣布您的功能
只要陈述你想要发生的事情,java就会做到。
其他问题
在这种情况下,这不是问题,因为numb
是由用户直接输入的。但一般来说,你永远不应该将浮点数与绝对值进行比较
以下不保证是真实的。
((a/b*b)-a == 0)
由于舍入错误,您可能会得到意外结果,结果为((a/b*b)-a)
为0.00000000001
,这会导致您测试(麻木!= 0)失败。
因为您正在与用户输入进行比较,所以现在没问题,但如果您正在检查计算的输出,请记住浮点计算是不准确的!
答案 2 :(得分:0)
从我所看到的,你应该只在循环中调用“input()”一次。你打电话两次 - 即
input();
numb = input();
取出第一个“input();”你应该好好去。
你也不需要执行“sum(add,numb);”两次,所以拿出“总和(加,麻);”行,只需使用“add = sum(add,numb);”。