Получить данные по заданному индексу - PullRequest
1 голос
/ 20 апреля 2020

При кодировании программы для управления сотрудником мне нужен метод, который выплевывает соответствующие данные в конкретный индекс c (число, указанное пользователем). Уже испробовал множество методов, чтобы это произошло, например, приведенный ниже, но безуспешно:

public static void ausgabeIndex(int index, String[] nN, String[] vN, String[] adres) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Geben Sie bitte die Nummer des/der regestrierten Mitarbeiters/Mitarbeiterin ein: ");
    index = sc.nextInt();
    for (int i = 0; i < nN.length; i++) {
        if (nN[i].equals(index)) {
            System.out.println(nN[index]);
            System.out.println(vN[index]);
            System.out.println(adres[index]);

        }
    }
}

, если у вас есть идея, был бы рад, если бы не возражал, поэтому это может заметить другие. Все равно спасибо

Ответы [ 2 ]

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

Неясно, есть ли здесь более одной проблемы, так как вы не сказали, какова была настоящая проблема, кроме того, что она не работает.

Кроме того, ваши данные здесь немного странные. Это было бы лучше использовать как class для инкапсуляции всех данных вместо трех строковых массивов.

Однако я подозреваю, что это является частью вашей проблемы: nN[i].equals(index)

nN - это массив String, а index - это int. Эти никогда не будут равными. Это не тот же тип данных.

Чтобы правильно сравнить строку и целое число, вам нужно либо преобразовать String в int или int в String. Преобразование int в строку является более безопасным вариантом, поэтому вы можете сделать это:

nN[i].equals(String.valueOf(index))

Чтобы сделать обратное, преобразовать String в int, Вы можете использовать Integer.parseInt(String)

Integer.parseInt(nN[i]) == index

Еще одно примечание: public static void ausgabeIndex(int index

Вы передаете index, но сразу же перезаписываете его своим Scanner.nextInt , Вам не нужно это как аргумент метода.

0 голосов
/ 20 апреля 2020

Вам необходимо учесть следующие вещи в вашем коде:

  1. Когда вы пытаетесь получить доступ к элементу из массива, обязательно проверяйте границы, чтобы избежать ArrayIndexOutOfBoundsException, например, вы получили доступ vN[index] без проверки, является ли index меньше vN.length. adres[index] также имеет ту же проблему.
  2. nN[i] - это String, в то время как i - это int, и поэтому их нельзя сравнивать, если вы не замените одно на другое. Однако я уверен, что вы не хотели сравнивать nN[i] с index. Глядя на вашу программу, кажется, вы хотите сравнить nN[i] с nN[index].
  3. Поскольку вы уже передаете index в качестве параметра методу, следующие строки не имеют смысла, если вы не хотите переопределить значение index. Если вы не хотите переопределять значение параметра, index, удалите эти строки.
Scanner sc = new Scanner(System.in);
System.out.println("Geben Sie bitte die Nummer des/der regestrierten Mitarbeiters/Mitarbeiterin ein: ");
index = sc.nextInt();

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

Ниже приведен код, включающий эти комментарии:

 public static void ausgabeIndex(int index, String[] nN, String[] vN, String[] adres) {
    if(index < nN.length) {
        for (int i = 0; i < nN.length; i++) {
            if (nN[i].equals(nN[index])) {
                System.out.println(nN[index]);
                if (index < vN.length) {
                    System.out.println(vN[index]);
                }
                if (index < adres.length) {
                    System.out.println(adres[index]);
                }
            }
        }
    } else {
        System.out.printnl("The index, " + index + " is out of the bounds.");
    }
}
...