问题:

当我运行此程序时,一切正常。
假设我选择的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());

     }


info方法如下。

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方法,它起作用了。那让我从Gameobject那里获得了ID“ 0001”。但是,只是传递“ 0001”没有。

最佳答案

我与Lefteris008在一起。检查您的objects.txt

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

让您的objects.txt包含id 0001<space>而不是0001足以使.equals(id)产生false

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

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


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

07-25 23:22
查看更多