在 Java 中获取产品 ID(整数)
Getting the product ID (integer) in Java
我遇到了一个问题,用户应该输入(通过扫描仪)对象的 ID。它应该是我为“ff”列表中的每个产品输入的 4 位数字之一(1234 或 5678 或 9012 或 2345 或 7890)。如果他们输入了一个不在列表中的数字 (ID),它应该输出一个句子告诉用户他们犯了一个错误。
无论我在控制台上输入什么,我都会得到 "You've made a mistake! There's no product with such ID!"
作为输出。即使我输入了我列表中的号码。
System.out.println("I'm displaying boots:\n");
List<FemaleFootwear> ff = new ArrayList<FemaleFootwear>();
ff.add(new FemaleFootwear(1234, "Boots 1", 180));
ff.add(new FemaleFootwear(5678, "Boots 2", 190));
ff.add(new FemaleFootwear(9012, "Boots 3", 150));
ff.add(new FemaleFootwear(3456, "Boots 4", 140));
ff.add(new FemaleFootwear(7890, "Boots 5", 220));
System.out.println(ff);
System.out.println("For shopping type 1, for going back to the menu type 2.");
int option = sc.nextInt();
if (option == 1) {
System.out.println("Please enter the product ID:\n");
int option2 = sc.nextInt();
if (option2 == ff.indexOf(0)) {
while (ff.contains(option2)){
System.out.println("You've chosen the product " + option2);
}
}else {
System.out.println("You've made a mistake! There's no product with such ID!");
}
}
例如,如果我输入“1234”,即名为 'Boots 1' 的产品,输出应该是“您选择了产品 1234”。但是如果我输入了一个列表中不存在的数字(或一个字母),它应该会显示这个错误。
indexOf(Object o)
要求您提供列表中包含的实际对象。为了搜索列表中的对象(包括 .contains()
),您需要在 class...
上实现 equals
和 hashcode
我认为您的意思是 ff.get(0)
,而不是 ff.indexOf(0)
,即使如此,您也无法使用 ==
或 .equals()
将整数与列表中的对象进行比较,因为那永远不会匹配。
相反,您需要通过他们的 ID 搜索列表,并且不需要 while 循环。
System.out.println("Please enter the product ID:\n");
int option2 = sc.nextInt();
Optional<FemaleFootwear> search = ff.stream()
.filter(footwear -> footwear.getID() == option2)
.findFirst();
if (search.isPresent()) {
System.out.println("You've chosen the product " + option2);
} else {
System.out.println("You've made a mistake! There's no product with such ID!");
}
请记住,以任何前导零开头的“4 位数字”不是“4 位数字”,因此您可能不想使用整数来表示它。
我遇到了一个问题,用户应该输入(通过扫描仪)对象的 ID。它应该是我为“ff”列表中的每个产品输入的 4 位数字之一(1234 或 5678 或 9012 或 2345 或 7890)。如果他们输入了一个不在列表中的数字 (ID),它应该输出一个句子告诉用户他们犯了一个错误。
无论我在控制台上输入什么,我都会得到 "You've made a mistake! There's no product with such ID!"
作为输出。即使我输入了我列表中的号码。
System.out.println("I'm displaying boots:\n");
List<FemaleFootwear> ff = new ArrayList<FemaleFootwear>();
ff.add(new FemaleFootwear(1234, "Boots 1", 180));
ff.add(new FemaleFootwear(5678, "Boots 2", 190));
ff.add(new FemaleFootwear(9012, "Boots 3", 150));
ff.add(new FemaleFootwear(3456, "Boots 4", 140));
ff.add(new FemaleFootwear(7890, "Boots 5", 220));
System.out.println(ff);
System.out.println("For shopping type 1, for going back to the menu type 2.");
int option = sc.nextInt();
if (option == 1) {
System.out.println("Please enter the product ID:\n");
int option2 = sc.nextInt();
if (option2 == ff.indexOf(0)) {
while (ff.contains(option2)){
System.out.println("You've chosen the product " + option2);
}
}else {
System.out.println("You've made a mistake! There's no product with such ID!");
}
}
例如,如果我输入“1234”,即名为 'Boots 1' 的产品,输出应该是“您选择了产品 1234”。但是如果我输入了一个列表中不存在的数字(或一个字母),它应该会显示这个错误。
indexOf(Object o)
要求您提供列表中包含的实际对象。为了搜索列表中的对象(包括 .contains()
),您需要在 class...
equals
和 hashcode
我认为您的意思是 ff.get(0)
,而不是 ff.indexOf(0)
,即使如此,您也无法使用 ==
或 .equals()
将整数与列表中的对象进行比较,因为那永远不会匹配。
相反,您需要通过他们的 ID 搜索列表,并且不需要 while 循环。
System.out.println("Please enter the product ID:\n");
int option2 = sc.nextInt();
Optional<FemaleFootwear> search = ff.stream()
.filter(footwear -> footwear.getID() == option2)
.findFirst();
if (search.isPresent()) {
System.out.println("You've chosen the product " + option2);
} else {
System.out.println("You've made a mistake! There's no product with such ID!");
}
请记住,以任何前导零开头的“4 位数字”不是“4 位数字”,因此您可能不想使用整数来表示它。