Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取文本文件中的下一行_Java_Loops_Text_Input - Fatal编程技术网

Java 读取文本文件中的下一行

Java 读取文本文件中的下一行,java,loops,text,input,Java,Loops,Text,Input,我正在尝试从文本文件中读取输入,该文本文件的格式如下: 2 80 97 5 69 79 89 99 58 7 60 70 80 90 100 0 59 每行的第一个数字是每个“区段”的“等级”数 我让我的程序读一节,但我不知道如何让它读有多少节,然后再读下一行 我想我可以把我当前的代码放在一个计数控制的循环中,这个循环将首先读取有多少节,然后运行那么多次。我只是不知道如何将这个想法转化为代码 以下是Revavent代码部分: public static void main(String a

我正在尝试从文本文件中读取输入,该文本文件的格式如下:

2 80 97 
5 69 79 89 99 58 
7 60 70 80 90 100 0 59
每行的第一个数字是每个“区段”的“等级”数

我让我的程序读一节,但我不知道如何让它读有多少节,然后再读下一行

我想我可以把我当前的代码放在一个计数控制的循环中,这个循环将首先读取有多少节,然后运行那么多次。我只是不知道如何将这个想法转化为代码

以下是Revavent代码部分:

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);
publicstaticvoidmain(字符串args[])引发异常
{
扫描仪输入=新扫描仪(新文件(“prog2test.txt”);
//int sections=(in.nextInt());
整数分数=(in.nextInt());
int SCORESOFTRAVERAGE=分数;
积分总数=0;
双平均=0;
int A=0;
int B=0;
int C=0;
int D=0;
int F=0;
int最高=0;
int最低=100;
while(分数>0&&in.hasnetint())
{
int grade=in.nextInt();
如果(等级>=90)
A++;
否则,如果(等级>=80)
B++;
否则,如果(等级>=70)
C++;
否则,如果(等级>=60)
D++;
其他的
F++;
如果(等级>最高)
最高=等级;
if(等级<最低)
最低=等级;
分数--;
分数总计=(分数总计+分数);
}  
平均值=总分/分数旅行;
System.out.println(“第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(“最低分:+最低分”);
System.out.println(“最高分数:+最高分”);
System.out.println(“平均值:+平均值”);

编辑:使用complete方法更新。

如果您使用的是Scanner,则可以使用hasNext()方法


只要文本中有任何字符串被空格分隔,这将是正确的。

您可以读取整行内容,然后使用
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
}
for(int i=1;i=90)
A++;
//等等
}

并在
while
循环中包含整个过程,以迭代每一行。

因为您知道每一行中的第一个int不是一个等级,所以可以使用
someString=in.nextLine()
保存每一行,而
in.hasNextLine()保存每一行
然后使用新的
扫描器
实例对每个保存的字符串进行迭代,跳过每行的第一个整数。

是否使用扫描器?谢谢。我想我必须把我的许多变量放在while循环中,这样它们就可以为每个新的部分重置。我用完整的方法更新了我的帖子。问题是你无法分辨什么是分数,每个部分的分数是多少。这是不分青红皂白的,因为你不知道什么时候换行。我试过了,并且成功了。非常感谢你!我必须将所有变量移到内部循环中,并在外部循环之外创建一个新的“部分”变量,以防任何阅读本文的人感到好奇。