如何让Scanner在while循环中存储和重复

时间:2016-07-01 03:45:58

标签: java

我需要编写一个接受非负双重类型的程序  数字为 收入金额一个接一个 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;
             }    
        }
    } 
}

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. 您实际上从未实际增加总和计数
  2. 您在循环之前读取 i 的输入,但随后您在循环中读入 nextDouble 并且循环条件仅检查 i - 永远不会改变。
  3. 您永远不会打印出最低,平均和最高
  4. while和if语句中的条件是多余的(除了if条件接受 0 ,而while条件不是
  5. 现在,这似乎非常类似于我的编程任务,因此我不会为您发布完整的代码。以下是修复代码应该采取的措施:

    1. 循环中增加总和计数
    2. 使用 i nextDouble - 而不是两者。
    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
      }
      

答案 1 :(得分:0)

试试这个:

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);
     }
}