Поиск переменной в двух массивах - PullRequest
1 голос
/ 22 апреля 2020

Программа, над которой я работаю, - это программа персонального управления для 500 сотрудников. Все функции программ, такие как (дать имена всех сотрудников, найти специфицированного c employee et c ..), назначены конкретным c методам. Метод, над которым я работаю правильно, стал для меня очень сложным, так как он работал в начале создания метода, а сейчас нет! Изменили код в разное время и не знали, в чем может быть проблема, потому что, как сказано, он работал с самого начала.
Проблема: метод не удовлетворяет цели и дает искомое имя / фамилию. Даже если имя существует, оно говорит, что нет.

метод:

public static void suche(String[] vN, String[] nN, String[] adres) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben Sie den Vornamen des Mitarbeiters ein: ");
        String vn = sc.nextLine();
        System.out.println("Geben Sie den Nachnamen des Mitarbeiters ein: ");
        String nn = sc.nextLine();
        for (int i = 0; i < nN.length; i++) {
            for (int j = 0; j < vN.length; j++); {
                if (nn.equals(nN[i]) && vn.equals(vN[i])) {
                    System.out.println("Der/die Mitarbeier/Mitarbeiterin " + nn + " " + vn + " ist vorhanden");
                } else {
                    System.out.println("Dieser Name existiert im System nicht");
                    break;
                }
            }
        }

если у вас есть вопрос, не стесняйтесь спрашивать. Не знаю, голосуйте, может быть, у других есть ответ. Спасибо

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

В настоящее время программа просматривает первого сотрудника, и если первый сотрудник не имеет совпадающих имени и фамилии, программа выводит «not found» и прекращает поиск (используя break).

Что вы можете сделать, так это сохранить переменную, которая сообщает, нашли ли вы подходящего сотрудника. Если после l oop совпадений не найдено, , тогда распечатывает предупреждающее сообщение.

У вас также есть двойной for-l oop, когда вам нужен только один для -l oop.

    boolean found = false;
    for (int i = 0; i < nN.length; i++) {
        if (nn.equals(nN[i]) && vn.equals(vN[i])) {
            System.out.println("Der/die Mitarbeier/Mitarbeiterin " + nn + " " + vn + " ist vorhanden");
            found = true;
            break;
        }
    }
    if (!found) {
        System.out.println("Dieser Name existiert im System nicht");
    }
1 голос
/ 22 апреля 2020

Вы используете i для индексирования обоих массивов вместо использования j для vN, и после этого у вас есть точка с запятой for (int j = ...);, что делает его последующим всегда выполняемым блоком.

public static void suche(String[] vN, String[] nN, String[] adres) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben Sie den Vornamen des Mitarbeiters ein: ");
        String vn = sc.nextLine();
        System.out.println("Geben Sie den Nachnamen des Mitarbeiters ein: ");
        String nn = sc.nextLine();
        boolean foundName = false;
        for (String nn2 : nN) {
            if (!nn.equals(nn2)) continue;
            for (String vn2 : vN) {
                if (vn.equals(vn2)) {
                    System.out.println("Der/die Mitarbeier/Mitarbeiterin " + nn + " " + vn + " ist vorhanden");
                    foundName = true;
                    break;
                }
            }
        }
        if (!foundName) {
          System.out.println("Dieser Name existiert im System nicht");
        }

Также вы перебираете массив vN независимо от того, было ли найдено nn в nN или нет. Я изменил код для поиска vn в vN только , если nn найдено в nN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...