Member 13906110 Ответов: 2

Если оператор in while оператор не работает (java)


Я попытался сделать пару строк, которые проверяют, равно ли случайное сгенерированное число ряду других целых чисел, если это не так, то оно возвращает это число, если нет, то повторяется.

Вот этот код:
static int sum1;
static int sum2 = 1;
static int sum3 = 2;
static int num1 = 3;
static int num2 = 4;
static int num3 = 5;
static int dum1 = 6;
static int dum2 = 7;
static int dum3 = 8;


public static int getNumbers()
{
    int holder;
    boolean numFound = false;
    holder = 1 + (int) (Math.random() * 9);
    while(numFound = false)
    {
        if (holder == 0)
        {
            holder = 1;
            if (holder!=sum1 && holder!=sum2 && holder!=sum3 && holder!=num1 && holder!=num2 && holder!=num3 && holder!=dum1 && holder!=dum2 && holder!=dum3)
            {
                numFound = true;
            }
        } else {
            if (holder!=sum1 && holder!=sum2 && holder!=sum3 && holder!=num1 && holder!=num2 && holder!=num3 && holder!=dum1 && holder!=dum2 && holder!=dum3)
            {
                numFound = true;
            }
        }
    }


В конце концов, он должен просто распечатать 9. Но он просто выводит случайные числа, как будто оператора while там даже нет. - Что случилось?

Что я уже пробовал:

Я уже пробовал изменить
Math.random()
метод в java.util.Случайный,
Random rand = new Random(9)

2 Ответов

Рейтинг:
1

Mohibur Rashid

Оригинал Грифф уже ответил на ваш вопрос. Позвольте мне улучшить ваше общее кодирование.

// all these sum, num, dum, can't you think something better? How about array?
static int sum1; // You are using default value of sum1; clever but bad practice; 
static int sum2 = 1;
static int sum3 = 2;
static int num1 = 3;
static int num2 = 4;
static int num3 = 5;
static int dum1 = 6;
static int dum2 = 7;
static int dum3 = 8;


public static int getNumbers()
{
    int holder;
    boolean numFound = false;
    holder = 1 + (int) (Math.random() * 9);
    // even if you write the right syntax as OriginalGriff suggested. And your holder is not between 0-8; your function will stuck in an infinte loop. because holder is going to be always false
    while(numFound = false)
    {
        if (holder == 0)
        {
            holder = 1;
            if (holder!=sum1 && holder!=sum2 && holder!=sum3 && holder!=num1 && holder!=num2 && holder!=num3 && holder!=dum1 && holder!=dum2 && holder!=dum3)
            {
               // if your code reach here, you code will not reach else. common sense; but if you code do not reach here why do you think it will reach if of "else"?
                numFound = true;
            }
        } else {
            if (holder!=sum1 && holder!=sum2 && holder!=sum3 && holder!=num1 && holder!=num2 && holder!=num3 && holder!=dum1 && holder!=dum2 && holder!=dum3)
            {
                numFound = true;
            }
        }
    }


Как решить эту проблему? исправление нескольких проблем
1. Как насчет того, чтобы вместо объявления каждого числа объявить его как массив
2. Переместить поколения держатель внутри цикла while, так что, если условие if произноси ложного восстанавливаются число
3. чтобы проверить, принадлежит ли число массиву, либо напишите функцию, чтобы проверить, содержит ли массив ваше сгенерированное число, либо вы можете использовать следующее предложение, описанное в stackoverflow java - как я могу проверить, содержит ли массив определенное значение? - переполнение стека[^]


Рейтинг:
0

OriginalGriff

"="- это задание, а не сравнение:

while(numFound = false)
Попробуй:
while(numFound == false)