繁体   English   中英

while循环中的方法

[英]Method within a while loop

具体来说,在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

这是我认为您不想要的东西:

        //Call Input method    
        input();
        numb = input();

进行两次会导致要求输入两次-但只能使用第二个...

另外,请务必注意浮点数和相等性。 0是一个很好的数字,但其他数字,尤其是小数则不太明显...

除此之外,代码似乎还可以...

(并且您没有“添加”方法)

您要求输入然后扔掉

//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 ,这将导致您测试(numb!= 0)失败。
因为您现在要与用户输入进行比较,所以现在还可以,但是,如果要检查计算的输出, 请记住浮点计算是不精确的!

从我所看到的,您应该只在循环中调用一次“ input()”。 您打过两次电话-即

          input(); 
          numb = input();

取出第一个“ input();” 而且你应该很好走。

您也不需要执行“ sum(add,numb);”。 两次,因此取出“ sum(add,numb);” 行,只需使用“ add = sum(add,numb);”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM