【发布时间】: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