【问题标题】:how do I display the correct output when no positve numbers are entered没有输入正数时如何显示正确的输出
【发布时间】:2020-02-15 22:23:43
【问题描述】:

我是编码新手。分配是计算所有输入的正数的平均值,并在输入零时退出。如果没有输入正数,则显示消息平均值是不可能的。

以下是我目前所拥有的。当只输入零或负数时,我被困在关于打印“无法计算平均值”消息的部分。

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int numbers = 0;
    int sumOfNumbers = 0;
    double averagePositive = 0;
    while (true) {
        System.out.println("Give a number: ");
        int number = Integer.valueOf(scanner.nextLine());
        if (number == 0)
            break;

        if (number > 0)
            sumOfNumbers = number + sumOfNumbers;

        if (number > 0)
            numbers = numbers + 1;

        if (number > 0)
            averagePositive = (double)sumOfNumbers / (double)numbers;
    }   
    System.out.println(averagePositive);
}

【问题讨论】:

  • 欢迎来到 StackOverflow。对于任何问答,如果任何答案对您有帮助,请通过单击向上箭头进行投票(如果您在网站上看到任何您喜欢的问题,请投票)。您觉得为您解决问题的答案,请点击旁边的复选标记接受它作为解决方案。这鼓励人们通过帮助他们获得声誉来回答。

标签: java while-loop average


【解决方案1】:

尝试如下...

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.print("Give a number: ");
    int num=input.nextInt();
    int tot=0; //total
    int count=0; // counting the positive numbers
    if(num>0){
         while(num!=0){
             tot+=num;
             count++;
             System.out.print("Give a number: ");
             num=input.nextInt();
             if(num<0){
              System.out.print("Not possible");
              return;
              }
         }
         double avg =(double)tot/n;
         System.out.print("Average: "+avg);

    }else{
         System.out.println("Cannot calculate the average.");
    }

}

【讨论】:

    【解决方案2】:

    我可能会这样做以保持简单。同样,一般情况下,尽量不要将代码挤在一起。大多数正式项目都需要一定程度的样式,并且通常需要运算符和大括号等之间的空间。从长远来看,它使代码更具可读性和更易于维护。

    在您的代码中,如果对 number > 0 进行多次测试,则无需重复相同的操作,它们可以全部捆绑在一起。如果程序更大更复杂,我可能会用更多的限定来命名变量名,但是对于像这样的简短程序,简短的名称就足够清晰了。

    continuebreak 是控制循环行为的重要关键字,可用于提高简洁性和清晰度。 continue 立即返回循环顶部,break 立即退出最内层循环。将double 除以int 得到double,因此我能够消除演员表。而+= 运算符使阅读该行更容易一些。

    同样在 Java 和 C 中,任何包含一行的 if()else 子句都不需要大括号,除非程序嵌套的方式是添加大括号会增加清晰度,否则通常会更清晰在这种情况下省略大括号。 if 语句在一个语句中说明了这两种方式。

    import java.util.Scanner;
    public class avg 
    {
        static int count = 0;
        static double sum = 0;
    
        public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("\nEnter a sequence of positive numbers (0 to calculate average):\n");
    
            while (true) {
                System.out.print("Number? ");
                int n = scanner.nextInt();
                if (n < 0) {
                    System.out.println("Negative numbers not allowed.");
                    continue;
                } else if (n == 0)
                    break;
    
                sum += (double)n;
                ++count;
            }           
    
            System.out.println("Average of " + count + " numbers = " + 
                (double)(sum / count) + "\n");
    
    
            System.exit(1);
        }
    }
    

    示例输出:

    $ java平均 输入正数序列(0 计算平均值) 数字? 1 数字? 2 数字? 3 数字? 4 数字? 5 数字? -6 不允许负数。 数字? 0 5 个数字的平均值 = 3.0

    【讨论】:

      猜你喜欢
      • 2018-01-17
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2021-05-19
      相关资源
      最近更新 更多