Проверка значений в логическом массиве (Java)

#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. ДА. Глупая ошибка с моей стороны! Большое спасибо 🙂