读取行时出现else语句

时间:2017-04-09 02:38:10

标签: java

所以我要做的是从一个文件读取并让用户输入HR后跟一些数字如果找到输入它会打印出输入所在的行我已经排序了但我的问题是我的else语句如果没有找到HR代码,它会打印出未找到输入但我的问题是即使他们输入的数字被定位,它也会打印出所有不同行的else语句有数字。 (对不起,我在解释东西),但无论如何这里是代码。

不知道这是否更容易理解,但我想要做的是如果找到输入然后打印出该行,那就可以了。但我需要做的是。如果没有找到输入,那么我希望它打印出文件中找不到输入,但我不希望它打印出文件中的每一行

package Assignment;

import java.util.*;
import java.io.*;

public class Planets1 {


    public static void main( String [ ] args )
    {
        {
            File file =new File("stars1.dat");
            Scanner in;

            Scanner keyboard = new Scanner (System.in);
            System.out.println("Enter HR code : ");

            String userInput = keyboard.nextLine();
            try {
                in = new Scanner(file);
                while(in.hasNext())
                {
                    String line=in.nextLine();
                    if(line.contains(userInput.toUpperCase()))
                        System.out.println(line);
                    else if(!line.contains(userInput.toUpperCase()))
                        System.out.println("No Planet with the HR code: " + userInput.toUpperCase() + " Was found.");

                }
            } catch (FileNotFoundException e) {

                e.printStackTrace();
            }


    }
    }
}

如果找到代码,它会输出什么:

输入人力资源代码:

897年

Acamar; Theta 1 Eridani; HR 897

没有人力资源代码的行星:HR 897被发现。

没有人力资源代码的行星:HR 897被发现。

没有人力资源代码的行星:HR 897被发现。

没有人力资源代码的行星:HR 897被发现。

没有人力资源代码的行星:HR 897被发现。

没有人力资源代码的行星:HR 897被发现。

1 个答案:

答案 0 :(得分:1)

您的if . . . else if正在为输入文件中的每一行执行。

因此,如果文件中的一行与输入的HR代码匹配,则会打印该行。

但是对于匹配人力资源代码的所有其他行,都会打印出“无行星......被发现”的消息。

在决定是否打印“No Planet ...被发现”消息之前,您需要等待处理文件中的所有行之后

boolean found = false;
while(in.hasNext())
{
    String line=in.nextLine();
    if(line.contains(userInput.toUpperCase())) {
        System.out.println(line);
        found = true;
    }
}
if (found == false) {
    System.out.println("No Planet with the HR code: " + userInput.toUpperCase() + " Was found.");
}