我正在尝试从文本文件中读取输入,格式如下:
2 80 97
5 69 79 89 99 58
7 60 70 80 90 100 0 59
每行的第一个数字是每个“部分”的“等级”数。
我让我的程序读取了一个部分,但我无法弄清楚如何让它读取将会有多少部分,然后阅读下一行。
我想我可以将我当前的代码放在一个计数控制的循环中,该循环将首先读取有多少部分,并多次运行循环。我只是不知道如何将这个想法转换为代码。
以下是反思代码部分:
public static void main(String args[]) throws Exception
{
Scanner in = new Scanner(new File("prog2test.txt"));
//int sections = (in.nextInt());
int scores = (in.nextInt());
int scoresForAverage = scores;
int scoreTotals = 0;
double average = 0;
int A = 0;
int B = 0;
int C = 0;
int D = 0;
int F = 0;
int highest = 0;
int lowest = 100;
while (scores > 0 && in.hasNextInt())
{
int grade = in.nextInt();
if (grade >= 90)
A++;
else if (grade >= 80)
B++;
else if (grade >= 70)
C++;
else if (grade >= 60)
D++;
else
F++;
if (grade > highest)
highest = grade;
if (grade < lowest)
lowest = grade;
scores--;
scoreTotals = (scoreTotals + grade);
}
average = scoreTotals/scoresForAverage;
System.out.println("Scores for section 1");
System.out.println("A's: " + A);
System.out.println("B's: " + B);
System.out.println("C's: " + C);
System.out.println("D's: " + D);
System.out.println("F's: " + F);
System.out.println("Lowest score: " + lowest);
System.out.println("Highest score: " + highest);
System.out.println("Average: " + average);
编辑:使用完整方法更新。
答案 0 :(得分:2)
由于您知道每行ISNT中的第一个int是一个等级,您可以使用someString = in.nextLine()
同时in.hasNextLine()
保存每一行,然后使用新{{1}遍历每个保存的字符串跳过第一个整数每行的实例。
答案 1 :(得分:0)
如果您使用的是Scanner,则可以使用方法hasNext();
只要文本中的任何字符串由空格分隔,就会成立。
答案 2 :(得分:0)
您可以读取整行,然后使用String.split
方法使用空格分隔符将其拆分为数组。
阅读完行后:
String grades[] = line.split(" ");
然后您可以使用for
循环......
for(int i=1; i<grades.length; ++i) {
//start an index 1 to skip the non-grade first number on line
int grade = parseInt(grades[i]);
if (grade >= 90)
A++;
//etc on down the line
}
并在while
循环中包含整个过程以迭代每一行。