【问题标题】:How do you get a Scanner to store and repeat in a while loop你如何让扫描器在一个while循环中存储和重复
【发布时间】:2016-07-01 03:45:57
【问题描述】:

我需要编写一个接受非负双精度类型的程序 数字为 收入金额一一计算 l 一个负数 被输入 , 负数结束 程序。当程序通过输入负数完成时 ,它打印出 输入收入集的最小值、平均值和最大值(不包括最后一个负数) 数字 是 因为它只表示用户输入的结束)。

package incomeapp;
import java.util.Scanner;

/**
 *
 * @author Kenneth
 */
public class IncomeApp {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter an income (any negative number to quit: ");
        double sum = 0;
        int count = 0;
        double i = sc.nextDouble();
        while (i > 0){
            double nextDouble;     
            nextDouble = sc.nextDouble();
             if (i < 0){
                 break;
             }    
        }
    } 
}

【问题讨论】:

  • 您当前的代码有什么问题?此外,如果您想停止否定,则应该在 i>=0 时停止 breal 是不必要的
  • 在您的 while 循环中,条件应为 i>=0 并删除 if 中断。也应该是 i = sc.nextDouble() 忘记你的 neXtDouble 双倍,所以当用户输入负数时,它会跳出循环。只需将 i 存储在某个数组中,然后在最后循环遍历它以获取并计算您的输出值
  • 输入数字后不重复
  • 为什么是java-8 标签?

标签: java


【解决方案1】:

您的代码存在一些问题:

  1. 您永远不会真正增加 sumcount
  2. 您在循环之前将输入读入 i,然后在循环内读入 nextDouble,并且循环条件仅检查 i -永不改变。
  3. 您永远不会打印出最小值、平均值和最大值
  4. while 和 if 语句中的条件是多余的(除了 if 条件接受 0 而 while 条件不接受)

现在,这对我来说似乎很像一个编程任务,所以我不会为你发布完整的代码。不过,您应该采取以下措施来修复您的代码:

  1. 在循环中增加 sumcount
  2. 使用 either inextDouble - 不能同时使用。
  3. 在循环后打印所需的输出
  4. 选择一种终止循环的方法。以下是关于如何做到这一点的两个想法:

    double i = sc.nextDouble();
    while (i > 0) {
        // Do something with i
        i = sc.nextDouble();
    }
    

    while (true) {
        double i = sc.nextDouble();
        if (i <= 0) {
            break;
        }
        // Do something with i
    }
    

【讨论】:

    【解决方案2】:

    试试这个:

    import java.util.*;
    public class HelloWorld{
    
         public static void main(String []args){
            Scanner sc = new Scanner(System.in);
                System.out.print("Enter an income (any negative number to quit: ");
                double sum = 0;
                double max = 0;
                double min = Double.MAX_VALUE;
                int count = 0;
                double nextDouble;
                while (sc.hasNext()) {    
                    nextDouble = sc.nextDouble();
                    max = Math.max(max, nextDouble);
                     if (nextDouble < 0){                        
                         break;
                     }else {
                        min = Math.min(nextDouble, min);
                        sum += nextDouble;
                        count++;
                     }
                }
           System.out.println("Average: " + sum/count);
           System.out.println("Min: " + min);
           System.out.println("Max: " + max);
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2023-01-08
      • 2014-03-28
      • 2014-10-18
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多