Java Метод поиска совпадения в ArrayList - PullRequest
0 голосов
/ 23 января 2020

У меня есть следующий метод в моей программе, который позволяет пользователю вводить уникальный идентификатор, связанный с ноутбуком в ArrayList.

Требуемый вывод выглядит следующим образом:

  • Если идентификатор, введенный пользователем, совпадает с идентификатором в ArrayList, ноутбук и его спецификации будут распечатаны.
  • Если идентификатор не совпадает, он напечатает «Неверный идентификатор».

Я очень близок к достижению этого; однако я могу только выяснить, как заставить это печатать, соответствует ли это для каждого ноутбука в списке. Так, например, если идентификатор, введенный пользователем, соответствует одному из трех ноутбуков в списке, он напечатает следующим образом:

Acer Predator Hel ios 300 Процессор: Intel i7-9750h Графический процессор: NVIDIA GTX1660ti Память: 16GB ID: 1234567

Неверный идентификатор.

Неверный идентификатор.

Поэтому мой вопрос: как мне заставить его печатать ТОЛЬКО одиночное совпадение или "Неверный идентификатор", пока все еще в состоянии l oop через весь список, чтобы проверить на совпадение? Не обязательно просить вас накормить меня ложкой, но хотя бы помогите направить меня в правильном направлении или помогите с логи c. Заранее благодарю за любую помощь!

Мой метод следующий:

private static void findLaptop(ArrayList arr) {

    //Prompt user to input an ID.
    System.out.println("Input ID: ");
    System.out.println();

    //Scan for user input.
    Scanner keyboard = new Scanner(System.in);
    int inputId = keyboard.nextInt();

    //Loop through ArrayList and check for a match.
    for(int i=0; i<arr.size(); i++) {

        //If entered ID matches, print laptop information.
        if(inputId == ((Laptops) arr.get(i)).getId()) {
            System.out.println(((Laptops)arr.get(i)).getModel() + " CPU: " + ((Laptops)arr.get(i)).getCpu() + " GPU: " +
                    ((Laptops)arr.get(i)).getGpu() + " Memory: " + ((Laptops)arr.get(i)).getMemory() + "GB ID: " + 
                    ((Laptops)arr.get(i)).getId());
        }
        //If entered ID does not match, print invalid ID.
        else if(inputId != ((Laptops) arr.get(i)).getId()) {
            System.out.println("Invalid ID.");
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 23 января 2020

Используйте код ниже:

    //Create a boolean
    boolean found= false; 
    for(int i=0; i<arr.size(); i++) {
        //If entered ID matches, print laptop information.
        if(inputId == ((Laptops) arr.get(i)).getId()) {
            System.out.println(((Laptops)arr.get(i)).getModel() + " CPU: " + ((Laptops)arr.get(i)).getCpu() + " GPU: " +
                    ((Laptops)arr.get(i)).getGpu() + " Memory: " + ((Laptops)arr.get(i)).getMemory() + "GB ID: " + 
                    ((Laptops)arr.get(i)).getId());
                    //set boolean true and break
                    found = true;
                    break;
        }
    }
  //Out side the look check If entered ID does not match, print invalid ID.
    if(!found) {
       System.out.println("Invalid ID.");
    }
1 голос
/ 23 января 2020

Предположим, у вас есть класс с именем Laptop следующим образом:

public class Laptop {

    private String id;
    private String manufacturer;
    // other fields

    // getters and setters
}

Вы можете найти совпадения с id, используя Java 8 потоков:

List<Laptop> laptops = ...
String idToSearch = "something";

Optional<Laptop> result = laptops.stream()  // convert into stream for easier handling
    .filter(l -> l.getId().equals(idToSearch))  // find only laptops with a matching id
    .findFirst();  // find the first one, if present

переменная result является Optional<Laptop>, то есть может содержать или не содержать значение Laptop. Вы можете использовать этот результат следующим образом:

Laptop laptop = result.get();  // throws an exception if no value present, not reccomended

Laptop laptop = result.orElse(null);  // returns null if no value present

result.ifPresent(laptop -> {
    doSomething(laptop);  // this function is only called if a value is present
})
1 голос
/ 23 января 2020

Вы можете сделать это с помощью оператора возврата, который используется после печати соответствия

for(int i=0; i<arr.size(); i++) {

    //If entered ID matches, print laptop information.
    if(inputId == (arr.get(i)).getId()) {
        System.out.println((arr.get(i)).getModel() + " CPU: " + (arr.get(i)).getCpu() + " GPU: " +
                (arr.get(i)).getGpu() + " Memory: " + (arr.get(i)).getMemory() + "GB ID: " + 
                (arr.get(i)).getId());

        return;
     }
}

 // outside loop
 System.out.println("Invalid ID.");

edit

Если у вас есть ArrayList правильно настроен как ArrayList<Laptop>, тогда вам не понадобятся все эти сумасшедшие приведения.

edit2

Если вы foreach l oop, то это будет еще чище

for (Laptop lt : arr) {
    if (iputId == lt.getId()) // etc
...