Я скопировал и вставил ваш код и запустил его на своей машине. Да, вариант 2 у меня тоже не работал.
Перед тем, как полностью прочитать ваш код, я интуитивно чувствовал, что причина неудачи заключалась в использовании класса Scanner для получения имени сотрудника. У меня были аналогичные проблемы в прошлом, и лучше всего научиться использовать объекты InputStreamReader и BufferedStreamReader.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
1: Я ничего не делал с вашим main ()
public static void main(String[] args) {
int[] emplID={ 42577, 38611, 32051, 28627, 42061, 79451 };//employee ID
int ID = employeeID(emplID);
String[] emplNames= { "Bruce Wayne", "Barry Allen", "Hal Jordan", "Dinah Lance", "Oliver Queen", "Tineil Charles" };// Employee Names
search(emplNames, emplID);
}
2: Я ничего не сделал с вашей функцией employeeID ()
public static int employeeID(int [] emplID) {
//check ID length
for(int i=0; i< emplID.length; i++) {
if((emplID[i] > 10000)&&(emplID[i] < 99999)) {
System.out.print(emplID[i] + " - Valid ID length\n");
}
else {
System.out.println(emplID[i] + " - Invalid ID! ID must be Five digits!\n");
}//end of check length
//check if ID is prime
boolean isPrime = true;
for (int j = 2; j < emplID[i]; j++) {
if (emplID[i] % j == 0) {
System.out.println(emplID[i] + " - not prime");
isPrime = false;
break;
}
}
if(isPrime) System.out.println(emplID[i] + " - valid prime");//end of check prime
}//end of employeeID method
return 0;
}// end of ID checker
3: Это в вашем методе search (), где я сначала создал InputStreamReader и BufferedReader:
public static void search(String[] emplNames, int[]emplID) {
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader buff = new BufferedReader(in);
//Menu Choice
System.out.println("Please choose 1 to enter Employee ID or 2 to enter Employee Name:" );
int num = 0;
try {
num = Integer.parseInt(buff.readLine());
} catch (Exception e) {
e.printStackTrace();
}
4: Поскольку вариант 1 работает нормально, все, что я сделал, это изменил ваш l oop на l oop для каждого, чтобы его было легче читать.
// Choice 1 to enter ID to display name
if (num == 1) {
System.out.println("Please enter Employee ID:");
int searchID = 0;
try {
searchID = buff.read();
} catch (Exception e) {
e.printStackTrace();
}
for (int i : emplID) {
if (searchID == i) {
System.out.println("Name: " + emplNames[i]);
}
}
5 : Вот что я сделал, чтобы ваш 2-й вариант работал. Опять же, получите строку от пользователя с помощью метода readLine () объекта BufferedReader. Тогда он просто позволял вашему for-l oop искать совпадение. Вот и все. После этого я запустил программу и протестировал ее для всех названий, которые вы указали выше, работает нормально.
} else if (num == 2) {
System.out.println("Please enter Employee Name");
String searchName = "";
try {
searchName = buff.readLine();
} catch(Exception e) {
e.printStackTrace();
}
for(int ID = 0; ID< emplID.length; ID++){
if ((searchName.equals(emplNames[ID]))){
System.out.println("ID: " + emplID[ID]);
}
}
} else {
System.out.println("Employee Not Found");
}
}
}
6: Да, у сканера есть проблема, когда он либо не читает всю строку, либо вам нужно to flu sh поток перед получением ввода. Это вызвало у меня массу проблем в кучу простых программ. Затем я переключился на использование комбо InputStreamReader и BufferedStreamReader. Просто заверните их в блоки try-catch, и все будет в порядке. Взгляните на это, это сделает поведение вашего кода и вашу жизнь намного проще.
7: Надеюсь, это было полезно.