【问题标题】:Issues with loop skipping every other input in java循环跳过java中的所有其他输入的问题
【发布时间】:2014-02-10 14:21:59
【问题描述】:

我正在尝试为我的 java 类创建这个相当简单的程序。一切正常,除了当我试图有一个输入循环。我以前从未这样做过,它忽略了所有其他输入。下面是问题提示:

B.通道。 4 – 平均 - 编写一个程序,该程序将读取未指定数量的整数成绩并找到汇总总数和平均值。打印成绩、总成绩和平均成绩。最后一条记录将是 -1 的预告片记录。同时输出每个教学大纲评分标准的最终字母等级。

这里是代码:

import java.util.Scanner;
public class Average
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        float counter = 0;
        float accum = 0;
        float addAccum = 0;
        float tempLoop = 0;
        System.out.println("Please Enter Grade, Enter -1 to Finish: ");

        while (tempLoop != -1)
        {
            addAccum = in.nextFloat();
            counter++;
            accum = addAccum + accum;
            tempLoop = in.nextFloat();
        }
        float avgGrade = accum / counter;
        if(avgGrade >= 90)
        {
            System.out.println("\nYour Grade is: " + "A");
        }else if(avgGrade >=80)
        {
            System.out.println("\nYour Grade is: " + "B");
        }else if(avgGrade >=70)
        {
            System.out.println("\nYour Grade is: " + "C");
        }else if(avgGrade >=60)
        {
            System.out.println("\nYour Grade is: " + "D");
        }else
        {
            System.out.println("\nYour Grade is: " + "F");
        }
        System.out.println("\nGrade Total: " + accum);
        System.out.println("\nCounter Num :" + counter); // for testing only
        System.out.println("\nAverage Grade: " + avgGrade);
    }
}

这是控制台输入/输出:

Please Enter Grade, Enter -1 to Finish:
100
100
100
100
100
100
-1
-1

Your Grade is: C

Grade Total: 299.0

Counter Num :4.0

Average Grade: 74.75

【问题讨论】:

  • 尝试使用 do/while 循环。 Do要求用户输入等级While等级不是-1。

标签: java loops skip


【解决方案1】:

您的 while 循环中有两次 in.nextFloat() 。 更改您的逻辑以先查找 -1,然后处理输入。

类似:

  tempLoop = in.nextFloat();
  while(tempLoop != -1){

     sum += tempLoop;
     tempLoop = in.nextFloat();
  }

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你正在做的是阅读两次;

    while (tempLoop != -1)
    {
        addAccum = in.nextFloat();  // Once Here
        counter++;
        accum = addAccum + accum;
        tempLoop = in.nextFloat();  // Again Here
    }
    

    因此只有一半的数据正在处理;

    您需要在进入循环之前读取第一个值,然后在最后只读取一次,然后检查新值是否不是 -1

    【讨论】:

      【解决方案3】:

      为了避免读取两次并在循环内读取,或者添加丑陋的 break 语句,我会这样做:

      while ((addAccum = in.nextFloat()) != -1) {
          counter++;
          accum = addAccum + accum;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        • 2013-04-23
        相关资源
        最近更新 更多