Поиск в массиве уникального имени с использованием метода - PullRequest
1 голос
/ 21 октября 2019

так что сегодня у меня был экзамен, и хотя я нашел способ заставить мой код работать, он мне не нравится

    public static void search(String name, Friend[] array) {

    for (int i = 0; i<array.length;i++) {

        if((array[i].getName()).equals(name)) {
            System.out.println(name+ " is found at position " +i+"\n");
        }
        else {
            System.out.print("\nName not in list\n");
        }
    }
}

Так что я здесь работаю, я ищу массив типа Friend для поискаимя передано из основного метода. Но я хочу остановиться, когда он найдет уникальное имя, поэтому, хотя мне нравится то, что у меня есть, оно показывает, что если есть более одного имени, я хотел бы показать только те, которые говорят, что содержат Джона, и игнорировать любое другое имя или, еслинет Джона, что он просто напечатал бы одно «Имя не в списке»

Ответы [ 4 ]

2 голосов
/ 21 октября 2019

У вас есть две проблемы:
вы не прерываете цикл for после того, как нашли имя
Вы печатаете сообщение «not found» в части else, а не после завершения цикла for, этопочему вы получаете это для каждого друга

public static void search(String name, Friend[] array) {
    for (int i = 0; i<array.length;i++) {
        if((array[i].getName()).equals(name)) {
            System.out.println(name+ " is found at position " +i+"\n");
            return; // Stop if you found one
        }
    }
    System.out.print("\nName not in list\n"); // print that only after going through the entire list

}
2 голосов
/ 21 октября 2019

Вы можете добавить break, а также boolean, чтобы избежать печати одного и того же сообщения снова и снова:

boolean nameFound = false;
for (int i = 0; i<array.length;i++) {
    if((array[i].getName()).equals(name)) {
        System.out.println(name+ " is found at position " +i+"\n");
        nameFound = true;
        break;
    }
}

if(!nameFound) System.out.print("\nName not in list\n");
0 голосов
/ 21 октября 2019

Просто альтернатива для удовольствия, если вас не волнует индекс. Также возвращается, было ли найдено имя.

public static boolean search(String name, Friend[] array) {

     boolean found = Arrays.stream(array)
               .anyMatch(item -> item.getName().equals(name));

     if (found) {
        System.out.println(name+ " is found\n");
     }
     else {
       System.out.print("\nName not in list\n");
     }

     return found;
}
0 голосов
/ 21 октября 2019

Используйте break, чтобы разорвать ваш цикл, как только условие будет выполнено.

public static void search(String name, Friend[] array) {
   boolean found = false;
   for (int i = 0; i<array.length;i++) {
      if((array[i].getName()).equals(name)) {
         System.out.println(name+ " is found at position " +i+"\n");
         found = true;
         // break the loop
         // it will throw the control out of the loop
         break;
       }
    }

    // Not found print name not in the list
    if(!found){
       System.out.print("\nName not in list\n");
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...