文本文件行读取器-java arraylistreferencenom=newarraylist(); ArrayList bookTitle=新的ArrayList(); BufferedReader br=null; 试一试{ br=新的BufferedReader(新的文件阅读器(“Booklist.txt”); 而((br.readLine())!=null){ for(int count=1;count

文本文件行读取器-java arraylistreferencenom=newarraylist(); ArrayList bookTitle=新的ArrayList(); BufferedReader br=null; 试一试{ br=新的BufferedReader(新的文件阅读器(“Booklist.txt”); 而((br.readLine())!=null){ for(int count=1;count,java,arraylist,text-files,bufferedreader,Java,Arraylist,Text Files,Bufferedreader,您“丢弃”了第一行。因此,您首先得到的是第一个标题,而不是第一个数字。您应该只使用1个循环,而不是while循环和for循环: ArrayList <Integer> referenceNom = new ArrayList <Integer>(); ArrayList <String> bookTitle = new ArrayList <String>(); BufferedReader br = null;

您“丢弃”了第一行。因此,您首先得到的是第一个标题,而不是第一个数字。您应该只使用1个循环,而不是while循环和for循环:

    ArrayList <Integer> referenceNom = new ArrayList <Integer>();
    ArrayList <String> bookTitle = new ArrayList <String>();
    BufferedReader br = null;

    try {
        br = new BufferedReader(new FileReader("Booklist.txt"));
        while ((br.readLine()) != null ){
            for (int count = 1; count <= 44; count++){
                if (count % 2 == 1){
                    referenceNom.add(Integer.parseInt(br.readLine()));
                    System.out.print(referenceNom.get(count));
                }else {
                    bookTitle.add(br.readLine());
                    System.out.print(bookTitle.get(count));
                }
            }                                     
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

for(int count=1;count您“丢弃”了第一行。因此,您首先得到的是第一个标题,而不是第一个数字。您应该只使用1个循环,而不是while循环和for循环:

    ArrayList <Integer> referenceNom = new ArrayList <Integer>();
    ArrayList <String> bookTitle = new ArrayList <String>();
    BufferedReader br = null;

    try {
        br = new BufferedReader(new FileReader("Booklist.txt"));
        while ((br.readLine()) != null ){
            for (int count = 1; count <= 44; count++){
                if (count % 2 == 1){
                    referenceNom.add(Integer.parseInt(br.readLine()));
                    System.out.print(referenceNom.get(count));
                }else {
                    bookTitle.add(br.readLine());
                    System.out.print(bookTitle.get(count));
                }
            }                                     
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

for(int count=1;count
如果有什么不清楚的地方,请告诉我


如果有任何不清楚的地方,请告诉我。

首先,将读取的行存储在变量上

int count = 0;
String line = null;
while (line = (br.readLine() != null)) {
    if (count % 2 == 0) {
        referenceNom.add(Integer.parseInt(line));
    } else {
        bookTitle.add(line);
    }
    count++;
}
然后,您可以使用Try Cach来标识值的类型,因此您的代码可能如下所示:

String line=br.readLine();

像这样,可能有多于或少于44行的代码,您不需要更改代码。首先,将读取的行存储在变量上

int count = 0;
String line = null;
while (line = (br.readLine() != null)) {
    if (count % 2 == 0) {
        referenceNom.add(Integer.parseInt(line));
    } else {
        bookTitle.add(line);
    }
    count++;
}
然后,您可以使用Try Cach来标识值的类型,因此您的代码可能如下所示:

String line=br.readLine();


像这样,可能有多于或少于44行的代码,您不需要更改代码,否则(count==1);{
是错误的。您可以删除一个条件并使用
else
。编辑该部分。不要使用if和else if语句,只需让BufferedReader读取一行,然后在读取第二行之后立即读取。这将把for循环代码减少到两行代码。
}else if(count==1);{
是错误的。您可以删除一个条件并使用
else
。编辑该部分感谢不要使用if和else if语句,只需让BufferedReader读取一行,然后在读取第二行之后立即读取。这将把for循环代码减少到两行代码。是的,我尝试了第一个代码,它就工作了。您是如何创建St的环形线?我不能只用br.readLine()吗像是用来将字符串添加到bookTitle中的吗?@JeffreyCaoWatsYourPowerLvl:我以为你想保留这些数字。每次调用
readLine
都会读取不同的行。如果你不将返回值赋给变量,你就会丢失这些信息。你需要将结果存储在一个变量中,因为你想用res做两件事结果:a)检查
null
以确定是否达到文件结尾b)分析行并将结果添加到列表中。是的,我确实想保留这些数字,只是想了解你为什么这么做:)。我的意思是,你为什么要添加到引用中。添加(行)但对于bookTitle,你做了。添加(br.readLine)。是否bookTitle.add(行)不工作?@JeffreyCaoWatsYourPowerLvl:
始终包含带数字的行。如果有带数字的行,则正确的输入文件将跟随一行标题。如果在数字行之后到达文件结尾,则无需再次检查。
readLine
调用的返回值将直接返回添加到列表的
add
方法。(while循环在同一迭代中读取两行。)是的,我尝试了第一个代码,它成功了。你为什么创建了字符串行?我不能只使用br.readLine()吗像是用来将字符串添加到bookTitle中的吗?@JeffreyCaoWatsYourPowerLvl:我以为你想保留这些数字。每次调用
readLine
都会读取不同的行。如果你不将返回值赋给变量,你就会丢失这些信息。你需要将结果存储在一个变量中,因为你想用res做两件事结果:a)检查
null
以确定是否达到文件结尾b)分析行并将结果添加到列表中。是的,我确实想保留这些数字,只是想了解你为什么这么做:)。我的意思是,你为什么要添加到引用中。添加(行)但对于bookTitle,你做了。添加(br.readLine)。是否bookTitle.add(行)不工作?@JeffreyCaoWatsYourPowerLvl:
始终包含带数字的行。如果有带数字的行,则正确的输入文件将跟随一行标题。如果在数字行之后到达文件结尾,则无需再次检查。
readLine
调用的返回值将直接返回添加到列表的
add
方法。(while循环在同一迭代中读取两行。)这与@fabian描述的问题相同。您在while循环的条件下丢弃了第一行。很抱歉,我忘记更改Integer.pasreInt…@reubensanders粘贴的代码while循环条件中仍然存在问题:
(br.readLine())!=null
我觉得自己像个新手……很抱歉@ReubenSanders这与@fabian描述的问题相同。您在while循环的条件下丢弃了第一行。很抱歉,我忘了更改Integer.pasreInt的粘贴代码…@ReubenSanders问题仍然存在于while循环条件中:
(br.readLine())!=null
我觉得自己像个新手……对不起@ReubenSanders