【问题标题】:Java Output Errors Within While Loop?While循环内的Java输出错误?
【发布时间】:2017-11-23 19:21:08
【问题描述】:
package javahistogramtwo;

import java.util.Scanner;


public class JavaHistogramTwo {


    public static void main(String[] args) {
           int sum = 0;
        int count = 0;
        int mark = 0;
        int largest = 0, smallest = 0;
        int rangeOne = 0, rangeTwo = 0, rangeThree = 0, rangeFour = 0;

        System.out.println("Enter marks, -1 to finish: ");
        Scanner in = new Scanner(System.in);

        if (in.hasNextInt()) {
            {

                while (mark != -1) {
                    mark = in.nextInt();

                    if (mark < -1 || mark > 100) {
                        System.out.println("Error: Enter Valid Input Type: "
                                + "Numbers from 0 - 100 for Marks. Or -1 to finish.");
                    } else if (mark != -1) {
                        sum = sum + mark;
                        count++;

                        if (count == 1) {
                            largest = mark;
                            smallest = mark;
                        } else {
                            if (mark > largest) {
                                largest = mark;
                            }
                            if (mark < smallest) {
                                smallest = mark;
                            }

                            if (mark >= 0 && mark <= 29) {
                                rangeOne++;
                            } else if (mark >= 30 && mark <= 39) {
                                rangeTwo++;
                            } else if (mark >= 40 && mark <= 69) {
                                rangeThree++;
                            } else if (mark >= 70 && mark <= 100) {
                                rangeFour++;
                            }
                        }
                    }
                }
            }
        } else {
            System.out.println("Error 1");
        }

        System.out.print("0-29: ");
        for (int i = 0; i < rangeOne; i++) {
            System.out.print("*");
        }

        System.out.println();
        System.out.print("30-39: ");
        for (int i = 0; i < rangeTwo; i++) {
            System.out.print("*");
        }

        System.out.println();
        System.out.print("40-69: ");
        for (int i = 0; i < rangeThree; i++) {
            System.out.print("*");
        }

        System.out.println();
        System.out.print("70-100: ");
        for (int i = 0; i < rangeFour; i++) {
            System.out.print("*");
        }

        System.out.println("");
        if (count > 0) {
            System.out.println("Largest mark is: " + largest);
        } else {
            System.out.println("No data");
        }
        if (count > 0) {
            System.out.println("Smallest mark is: " + smallest);
        } else {
            System.out.println("No data");
        }
        if (count > 0) {
            double average = sum / count;
            System.out.println("Average marks: " + average);
        } else {
            System.out.println("No data");
        }

        if (count > 0) {
            System.out.println(rangeOne + rangeTwo + rangeThree + rangeFour + 
                    " Total Number of Students");
        } else {
            System.out.println("No data");
        }

        {
            System.out.println(rangeThree + rangeFour + " Number of Student Passed"
                    + " - (40 Marks or Above)");
        }
    }
}

你好。

以上是我的作业代码。

我正在尝试以星形格式显示输入数字的数量。 如:

  • 0 - 29: **
  • 30 - 39: *
  • 40 - 69:**
  • 70 - 100:***

在这种情况下,星号代表用户输入数字的数量 (8)。 2个0-29,1个30-39,2个40-69,3个70-100。

然后我会显示最大、最低和平均分数。这部分工作正常。

然后我打印出输入的学生人数。 (本例中为 8 个)。

然后以if mark大于等于40为条件,显示及格学生。 (本例中为 5 个)。

我的所有显示都正确。

但是,与星星、学生人数和及格学生有关。这显示错误。它总是显示为比输入的内容少一。因此,在这种情况下,将打印出 7 个(应该是 8 个)星。 7(应该是 8)学生将显示为输入。 4 个(应该是 5 个)学生将显示为通过。

我已经检查了我的代码。在第二个 NetBeans 应用程序中进行了一些更改。但是我仍然遇到同样的问题,看不出我的问题出在哪里。

我们将不胜感激。

谢谢。 :)

举个更清楚的例子:


  • 用户输入:
  • 15
  • 20
  • 20
  • 50
  • 60
  • 70
  • 70
  • 85
  • 99
  • 100
  • 100
  • (-1 结束)

  • 预期输出:
  • 0 - 29: ***
  • 30 - 39:
  • 40 - 69: **
  • 70 - 100: ******
  • 最大标记为:100
  • 最小标记是:15
  • 平均分:62.0
  • 11 名学生报名
  • 8 名学生及格 - (40 分或以上)

  • 实际输出:
  • 0-29: ** //这里缺少一颗星星
  • 30-39:
  • 40-69:**
  • 70-100:******
  • 最大标记为:100
  • 最小标记是:15
  • 平均分:62.0
  • 10 学生总数 //计算错误,应该是11
  • 7 学生及格人数 - (40 分或以上) // 计算 错了,应该是8

【问题讨论】:

  • 能否包含样本输入、样本输出和预期输出。它会让你更清楚你想要达到的目标
  • 这是因为在您对 if(count == 1) 的 else 条件下,您正在计算进一步的事情。而是先完成 else 块,然后进行 rangeone++ 计算。
  • 你昨天问的这个问题不是已经有答案了吗?
  • 您是否尝试更改 else 部分的范围?它没有产生预期的输出,因为目前您没有正确处理范围。
  • @Squeegee 我的回答对你有帮助吗?你能给个反馈吗?它是否有效?

标签: java


【解决方案1】:

许多人已经告诉过您,您的第一个缺失输入是由于一年级被忽略并且您的算法没有考虑在内。

if (count == 1) 部分将发生在一年级,但不会进行计算,因为它们都在代码的 else 部分中。

你应该做的是例如以下(来自你的代码):

if (count == 1) {
    largest = mark;
    smallest = mark;
} else {
    if (mark > largest) {
        largest = mark;
    }           
    if (mark < smallest) {
        smallest = mark;
    }
}    // Note that we close the first if-else here

// And so this part will be executed for every input mark
if (mark >= 0 && mark <= 29) {
   rangeOne++;
} else if (mark >= 30 && mark <= 39) {
    rangeTwo++;
} else if (mark >= 40 && mark <= 69) {
    rangeThree++;
} else if (mark >= 70 && mark <= 100) {
    rangeFour++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2012-01-02
    • 2013-09-28
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多