#java #arrays #boolean
#java #массивы #логическое
Вопрос:
У меня возникли некоторые небольшие трудности со следующей проблемой.
Я инициализировал логический массив с именем numberArray с 31 индексом. Предполагается, что пользователь вводит 5 цифр от 1 до 30, и каждый раз, когда вводится цифра, программа должна устанавливать для правильного индекса значение true. Например, если я введу 5, то:
numberArray[5] = true;
Однако, если пользователь вводит значение 5 во второй раз, пользователю должно быть выдано сообщение о том, что это число уже введено, и поэтому пользователь должен выбрать другое значение. Я попытался создать цикл следующим образом:
public void enterArrayValues() {
for(int i = 1; i < 6; i ) {
System.out.print("Give " i ". number: ");
int enteredNumber = input.nextInt();
while (numberArray[enteredNumber] = true) {
System.out.println("This number has already been chosen.");
System.out.print("Give " i ". number again: ");
enteredNumber = input.nextInt();
}
numberArray[enteredNumber] = true;
}
}
Проблема в том, что когда я запускаю программу, я автоматически получаю сообщение «Номер уже выбран», независимо от того, что я ввожу. Даже в первый раз, когда я ввожу номер. Я этого не понимаю. Разве не все значения в логическом массиве false по умолчанию?
Я был бы очень признателен, если бы кто-нибудь мог мне в этом помочь!
Комментарии:
1. Если это домашнее задание, вам, вероятно, следует пометить его так.
2. ОК. Будем делать это в будущем!
Ответ №1:
while (numberArray[enteredNumber] = true) {
сделай это
while (numberArray[enteredNumber] == true) {
или сменить на
while (true == numberArray[enteredNumber]) {
или просто отбросьте ==true
while (numberArray[enteredNumber]) {
Ответ №2:
while (numberArray[enteredNumber] = true)
является присваиванием, используйте ==
оператор или просто while (numberArray[enteredNumber])
.
Я знаю, что в это трудно вникнуть, пока вы еще учитесь, но чем раньше вы начнете кодировать в IDE, тем лучше для вас. Это один крошечный пример того, о чем вас предупредит IDE.
Ответ №3:
Измените строку while на:
while (numberArray[enteredNumber]) {
Поскольку ошибочный ввод =
вместо ==
является распространенной ошибкой, некоторые люди всегда кодируют этот тип оператора следующим образом:
while (true == numberArray[enteredNumber]) {
В этом формате, если вы используете =
вместо ==
, вы получите ошибку компилятора.
Кроме того, если вы используете инструмент статического анализа, такой как PMD, я полагаю, вы получите предупреждение для инструкции, которую вы изначально написали.
Ответ №4:
Проблема заключается в состоянии цикла while — вы используете оператор присваивания (=), тогда как предполагается, что вы используете средство сравнения равенства (==). Таким образом, условие цикла всегда выполняется, потому что вы присваиваете true индексированному полю. Я надеюсь, что это сработает :-).
Комментарии:
1. ДА. Это именно то, в чем моя проблема. Глупая ошибка с моей стороны!
Ответ №5:
Условие в цикле while должно быть while (numberArray[enteredNumber] == true)
. Вы используете оператор присваивания =
, а не оператор сравнения ==
. Присваивание — это выражение, которое возвращает присвоенное значение, которое true
в вашем случае.
Комментарии:
1. ДА. Глупая ошибка с моей стороны! Большое спасибо 🙂