问题:
当我运行此程序时,一切正常。
假设我选择的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();
这只是为了帮助您了解如何处理输入数据。这远远没有做好生产准备。