For-each循环不会打印第一个请求的行

时间:2016-11-11 08:40:40

标签: java

问题:

当我运行时,一切正常。 让我们说我选择的ID是:0001,0002,0003,0004。 和他们的信息:info1,info2,info3,info4。 如果我在扫描仪中通过0002,我会收到info2。正如你所期望的那样,但是如果我通过0001,我希望得到info1,但我什么也得不到。我尝试使用固定大小为3的数组,它工作得很好。我改为ArrayList,因为我不知道该文件有多长。为什么会这样?

我是编程新手,请原谅我对于在哪里寻找这些东西缺乏了解。

我的程序所做的是,读入一个文件并将所有行添加到ArrayList然后要求用户输入,输入应该是xxxx或4个字符的格式。

我作为示例制作的文本文件如下所示,行上没有多余的空格:

0001
info1
4
0002
info2
5
0003
info3
9
0004
info4
10
0005
info5
3

主要班级:

public class Main {

    public static ArrayList<Gameobject> games = new ArrayList<>();

    public static void main(String[] args) throws IOException {

        Scanner sc = new Scanner(new File("objects.txt"));

        String id, info;
        int amount;

        while(sc.hasNextLine()) {

            id = sc.nextLine();
            info = sc.nextLine();
            amount = Integer.parseInt(sc.nextLine());

            Gameobject s = new Gameobject(id, info, amount);

            games.add(s);
            System.out.println(s.getId());
         }

        sc = new Scanner(System.in);

        info(sc.next());

     }

信息 方法如下。

public static void info(String id){  
    for(Gameobject s : games){    
        if(s.getId().equals(id)){
            System.out.println(s.getInfo());
        }
    }
}

班级 Gameobject

public class Gameobject {

    String id, info;
    int amount;

    Gameobject(String id, String info, int amount) {
        this.id = id;
        this.info = info;
        this.amount = amount;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public int getAmount() {
        return amount;
    }
    public void setAmount(int amount) {
        this.amount = amount;
    }
}

我做了一些测试,并将games.get(0).getId()传递给了info方法,但它确实有效。这让我得到了ID&#34; 0001&#34;来自Gameobject。然而,只是传入&#34; 0001&#34;没有。

1 个答案:

答案 0 :(得分:2)

我和Lefteris008在这一次。检查您的objects.txt

您的ID是字符串,在您的for循环中,您将Gameobject.getId()与控制台输入进行比较。

objects.txt包含代码0001<space>代替0001.equals(id)就足以让false生效。

如果您的输入可能会出现格式错误,您可以尝试让您的代码更具防御性:

// This will remove leading and trailing whitespaces
id = sc.nextLine().trim();

这只是为了帮助您了解如何处理输入数据。这还远未准备好生产。