1

我正在使用 Scanner 方法来尝试获取文件输入。问题是我只得到名字和姓氏之后的第一个 int。这是文本文件:

John Doe 12 6 8 15 35 16 17 4 12 54
Mark Doe 16 67 8 12 35 19 78 3 12 101
Johnnie Smarts 20 10 10 20 40 100 20 10 20 100
Frank Noshow
Molly Guess 2 5 6 7 2 4 7 8 9 10

到目前为止,我已经完成了这么多代码:

import java.io.*;
import java.util.*;
import static java.lang.Math.*; 
import static java.lang.System.out;

public class StudentTester
{
    public static void main ( String[] args ) throws IOException
    {
        Scanner kb = new Scanner(System.in);
        System.out.println("\tWelcome.. " );
        System.out.println(" Please enter the file name. " );
        String filename = kb.nextLine();
        Scanner fileReader = new Scanner(new File(filename));
        //created a scanner object with a file object.
        //Creat a String array to hold each lince of the file. 
        String [] s = new String [10000]; //prepared for a 100 lines of text.
        int linesOfText = -1;
        int score[] = new int[10];
        while (fileReader.hasNextLine())//while the file has any lines.
        {
            linesOfText++;

            s[linesOfText] = fileReader.nextLine();
            //This places the first line of the file in the s array.
            //System.out.println(s[linesOfText]);//for testing purposes..
        }
        fileReader.close();//close the Scanner.

        for(int i=0;i<=linesOfText;i++){
            Scanner sc = new Scanner(s[i]);
            String fN = sc.next();
            String lN = sc.next();

            if(sc.hasNext()){
                score[i] = sc.nextInt();                 
            }
            else {
                System.out.println(" opps, there is no score here... ");
            }
            Student stu = new Student(fN,lN,score);
            System.out.println(score[i]);
        }
    }
}
4

2 回答 2

0
I think the following code can help you for your request :

package com.mongolhun.tech.basic.miscellaneous;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class StudentTester
{
    public static void main ( String[] args ) throws IOException
    {
        Scanner kb = new Scanner(System.in);
        System.out.println("/tWelcome.. " );
        System.out.println(" Please enter the file name. " );
        String filename = kb.nextLine();
        Scanner fileReader = new Scanner(new File("D:/workspace/test/src/test/java/com/yxyy/tech/basic/miscellaneous/" +filename));
        //created a scanner object with a file object.
        //Creat a String array to hold each lince of the file. 
        String [] s = new String [10000]; //prepared for a 100 lines of text.
        int linesOfText = -1;
        int score[] = new int[10];
        while (fileReader.hasNextLine())//while the file has any lines.
        {
            linesOfText++;

            s[linesOfText] = fileReader.nextLine();
            //This places the first line of the file in the s array.
            //System.out.println(s[linesOfText]);//for testing purposes..
        }
        fileReader.close();//close the Scanner.

        for(int i=0;i<=linesOfText;i++){
            Scanner sc = new Scanner(s[i]);
            String fN = sc.next();
            String lN = sc.next();
            int a = 0;
            while(sc.hasNext()){
                score[i] = sc.nextInt();    
                System.out.print(score[i] + " ");
                a = 1;
            }

            if (a == 0) {
                System.out.print("opps, there is no score here... ");
            }
            System.out.println();
//            Student stu = new Student(fN,lN,score);

        }
    }
}
于 2013-01-21T08:05:50.170 回答
0

那是因为您先执行 a next()next()然后执行 a nextInt()

只需更换

if (sc.hasNext()) {...} 

while (sc.hasNext()) {...}
于 2013-01-20T22:24:38.723 回答