0

我正在尝试使用扫描仪将一些数据从文本文件加载到 GUI。我的文本文件中有两个部分:俱乐部和会员。代码在俱乐部部分运行正常。例如,如果我的列表中有 4 个俱乐部,则会显示所有俱乐部,但对于“成员”部分,无论列表中有多少成员,都只会显示第一个成员。这是我的代码:

public void load (String fileName) throws FileNotFoundException {
     FileInputStream fileIn = new FileInputStream("Clubs.txt");
     Scanner scan = new Scanner(fileIn);

     while (scan.hasNextLine()){
            String line = scan.nextLine();
            if(line.equals("Members")){
                String firstName = scan.next();
                String lastName = scan.next();
                Pupil p1 = new Pupil( firstName, lastName);
                pupils[nbrPupils] = p1;
                nbrPupils ++;

               }   
             else if(line.equals("Clubs")){ 
                 while (scan.hasNext()){
                 String club = scan.nextLine();
                 Club aNewClub = new Club(club);
                 clubs[nbrClubs] = aNewClub;
                 nbrClubs ++;

                }

        }
4

4 回答 4

1

提示:你while (scan.hasNext())在这个Clubs部分做,但你没有在这个Members部分做。

于 2013-04-25T18:40:41.930 回答
1

while循环转换为if条件,因为您只想检查是否有下一行

else if (line.equals("Clubs")) {
       if (scan.hasNext()) {/////here if you use while loop , it will loop until the file is finish 
         String club = scan.nextLine();
        }
于 2013-04-25T18:44:54.720 回答
0
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadFile {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        new ReadFile().load("");
    }

    public void load (String fileName) throws FileNotFoundException {
         FileInputStream fileIn = new FileInputStream("C:\\Clubs.txt");
         Scanner scan = new Scanner(fileIn);
         boolean membersfound =false;
         while (scan.hasNextLine()){
                String line = scan.nextLine();

                if(line.equals("Members") || membersfound){

                    String firstName = scan.next();
                    String lastName = scan.next();
                   System.out.println("Member   "+firstName +":"+ lastName);

                   }   
                 else if(line.equals("Clubs") ){ 
                     while (scan.hasNext()){
                     String club = scan.nextLine();
                     if( club.equals("Members")){
                         membersfound = true;
                         break;
                     }
                     System.out.println("Clubname :" + club
                             );                

                    }

            }
}
    }
}

我本可以修改整个程序。但我想告诉你你的错误 样本 clubs.txt 文件 Members member1 member2 member3 Clubs club1 club2 club3

于 2013-04-25T18:53:37.117 回答
-1

当您这样做scan.nextLine()时,它将扫描仪移动到您当前读取的行之后。因此,如果您继续这样做scan.next(),扫描仪将从当前行的末尾开始(在这种情况下line)并读取它之后的内容。

看这里它说:

“将此扫描仪前进到当前行并返回被跳过的输入

你所能做的就是打电话split()substring()打开line并提取你需要的信息。

于 2013-04-25T18:51:19.010 回答