在 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...

上实现 equalshashcode

我认为您的意思是 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 位数字”,因此您可能不想使用整数来表示它。