Проверка значений в логическом массиве (Java) - PullRequest
0 голосов
/ 08 октября 2011

У меня есть небольшие трудности со следующей проблемой.

Я инициализировал логический массив с именем 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;
    }
}

Проблема в том, что когда я запускаю программу, я автоматически получаю сообщение «Номер уже выбран», независимо от того, что я ввожу. Даже в первый раз я ввожу номер. Я не понимаю этого. Разве все значения в логическом массиве не являются ложными по умолчанию?

Буду очень признателен, если кто-нибудь сможет мне помочь с этим!

Ответы [ 5 ]

5 голосов
/ 08 октября 2011
while (numberArray[enteredNumber] = true) {

сделай это

while (numberArray[enteredNumber] == true) {

или изменить на

while (true == numberArray[enteredNumber]) {

или просто бросьте ==true

while (numberArray[enteredNumber]) {
2 голосов
/ 08 октября 2011
while (numberArray[enteredNumber] = true) 

- это присвоение, используйте оператор == или просто while (numberArray[enteredNumber]).

Я знаю, что трудно понять, пока вы еще учитесь, но чем раньше вы начнете кодировать в IDE, тем лучше для вас. Это один крошечный пример того, о чем вас предупредит IDE.

1 голос
/ 08 октября 2011

Условие в цикле while должно быть while (numberArray[enteredNumber] == true). Вы используете оператор присваивания =, а не оператор сравнения ==. Назначение - это выражение, которое возвращает присвоенное значение, которое в вашем случае составляет true.

1 голос
/ 08 октября 2011

Проблема заключается в условии цикла while - вы используете оператор присваивания (=), тогда как вы должны использовать средство сравнения равенства (==).Таким образом, условие цикла всегда истинно, потому что вы присваиваете true индексируемому полю.Я надеюсь, что это будет работать :-).

1 голос
/ 08 октября 2011

Измените строку while на:

while (numberArray[enteredNumber]) {

Поскольку ошибочный ввод = вместо == является распространенной ошибкой, некоторые люди всегда кодируют этот тип оператора следующим образом:

while (true == numberArray[enteredNumber]) {

В этом формате, если вы используете = вместо ==, вы получите ошибку компилятора.

Кроме того, если вы используете инструмент статического анализа, такой как PMD,Я полагаю, вы получите предупреждение за заявление, которое вы изначально написали.

...