Я расстраиваюсь чем-то действительно основным здесь. Сканер просто не делает то, что я хочу, и я не знаю, почему, я был бы очень благодарен, если бы кто-нибудь мог мне помочьJava - Проблемы со сканером
, поэтому я пытаюсь запрограммировать базовый инвентарь, и я хочу, чтобы сканер проверял, было ли введено правильное имя строителя. Строковая переменная хранит введенное пользователем слово, если было введено неправильное имя строителя. Я просто хочу, чтобы строковая переменная была равна «ЛЮБОЙ». То, что происходит, - строка получается правильной (в столицах, как я хотел) AS WELL как «Any», а это не должно быть !, когда вводится что-то недействительное, ничего не печатается (и он должен печатать «Any»)
я сделал простой SSCCE:
import java.util.Scanner;
public class SSCCE {
public static void main(String[] args)
{
System.out.println("Enter a builder name: ");
Scanner scan = new Scanner(System.in);
//scan.useDelimiter("\\z"); // count a blank entry (end of input)
String entry_1 = scan.next();
if (entry_1.equalsIgnoreCase("FENDER")
|| entry_1.equalsIgnoreCase("MARTIN")
|| entry_1.equalsIgnoreCase("GIBSON")
|| entry_1.equalsIgnoreCase("COLLINGS")
|| entry_1.equalsIgnoreCase("OLSON")
|| entry_1.equalsIgnoreCase("RYAN")
|| entry_1.equalsIgnoreCase("PRS"))
{
entry_1 = entry_1.toUpperCase();
System.out.println(entry_1);
}
// if (entry_1.equals(entry_1.toLowerCase())
// || entry_1.equalsIgnoreCase(entry_1)
// && (entry_1.equalsIgnoreCase("FENDER")
// || entry_1.equalsIgnoreCase("MARTIN")
// || entry_1.equalsIgnoreCase("GIBSON")
// || entry_1.equalsIgnoreCase("COLLINGS")
// || entry_1.equalsIgnoreCase("OLSON")
// || entry_1.equalsIgnoreCase("RYAN") || entry_1
// .equalsIgnoreCase("PRS")))
// {
// entry_1 = entry_1.toUpperCase();
// }
if (!entry_1.equalsIgnoreCase("FENDER")
|| !entry_1.equalsIgnoreCase("MARTIN")
|| !entry_1.equalsIgnoreCase("GIBSON")
|| !entry_1.equalsIgnoreCase("COLLINGS")
|| !entry_1.equalsIgnoreCase("OLSON")
|| !entry_1.equalsIgnoreCase("RYAN")
|| !entry_1.equalsIgnoreCase("PRS")) {
entry_1 = "ANY";
System.out.println(entry_1);
}
}
}
редактировать: спасибо за все ответы, теперь я просто имеющие проблемы с scan.useDelimiter ("\ г"); , когда ничего не вводится он должен сказать «ANY» и так это делает, но теперь она всегда будет говорить «ANY» даже для правильного ввода
использовать trim(), чтобы удалить пустые места ввода. возможно, это поможет. Плюс совет по программированию, никогда не используйте несколько if, если вы можете заменить их одним циклом if-else. Это резко снижает нагрузку на процессор в случае больших программ. –
@ADi Что такое 'if-else loop'? – nhgrif
@nhgrif В C, если вы используете цикл if, за которым следует else, у него есть другой рабочий механизм только для набора if. Для каждого, если он ищет другие, которые имеют некоторые накладные расходы. исправьте меня, если я ошибаюсь. –