Этот код пытается принять ключи от пользователя и хранить их в массиве строковых данных. Позже в программе значение для каждого ключа отображается в определенном формате.Как я могу выйти из этого цикла?
Во-первых, я хочу, чтобы этот цикл завершался/выходил, когда пользовательский ввод пуст/следующая строка. Я не хочу использовать любой символ или строку EOF для выхода из цикла.
Я сделал несколько поисков по предыдущим SO-вопросам/решениям, но не работал в моем случае. Нужна помощь в сортировке этой проблемы или любых других альтернативных вариантах.
Заранее благодарен!
class DictionaryAndMap{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
Map<String, Integer> mp = new HashMap<String, Integer>();
String name;
int phone;
for(int i=0; i<len; i++){
name = sc.next();
phone = sc.nextInt();
mp.put(name, phone);
}
int i=0;
String arr1[] = new String[10];
String nam;
// I couldn't exit out of this loop
while(sc.hasNext()){
nam = sc.next();
if(nam!=null && !nam.trim().isEmpty()){
arr1[i] = nam;
i++;
}
else{
break;
}
}
// iterating through the array to find the search inputs
for(String j: arr1){
if(mp.containsKey(arr1[j])){
System.out.println(j+"="+mp.get(j));
}else{
System.out.println("Not found");
}
}
}
}
P.S. Значение hasNext() не изменяется на false, даже если вход пуст/null/"", поэтому цикл while никогда не заканчивается. Как я могу заставить hasNext() обнаружить любой из этих пустых входных данных и, следовательно, он может выйти из цикла?
Это утверждение 'else if' является избыточным. Он всегда будет «истинным», когда первый «if» будет «false». – 4castle
http://stackoverflow.com/a/10490358/7187887 –
Я столкнулся с этой нитью, но разве нет решения для этого, кроме использования инструкции EOF? Есть ли способ, по крайней мере, я могу отслеживать \ n из пользовательского ввода или что-то в этом роде? – Akhil