2016-01-05 3 views
1

Попытка создать метод, который сделает массив и присвоит разные числа от 1 до 9 каждому индексу массива (номера не могут быть повторены). , пожалуйста, посмотрите на логическое сравнение, которое я сделал, вот где cmd застрял во время выполнения. Я попытался разделить эти два, но ничего не происходит.2 boolean check несовместимы

Пожалуйста, помогите.

import java.util.ArrayList; 

class Testing { 

public static void main (String[] args) { 

    ArrayList<Integer> grid = new ArrayList<Integer>(); 

    int randNum; 
    int count = 0; 
    int size=8; 

    for (int b = 0; b <=size; b++) { 

     while (count <= size) { 

     randNum = (int) (Math.random() * 9); 


      if (grid.contains(randNum) == false & randNum != 0) { 

      grid.add(randNum); 
      count++; 

      } 
     } 
    System.out.println(grid.get(b)); 
    } 
    System.out.println("size: " + grid.size()); 
    } 
} 
+0

Вы уверены, что код «застрял»? Похоже, что это просто завершение без заполнения массива. –

ответ

1

Почему бы не использовать вместо этого Fisher-Yates shuffle?

То есть, заполните массив 1-9, а затем Collections.shuffle().


Помимо: использование && не & в исходном коде.

+0

спасибо, что я буду использовать его. collections.shuffle() – MicroFarad

+0

, но что меня беспокоит, почему 2 логических выражения не могут использоваться в одном «if()»? if (grid.contains (randNum) == false && randNum! = 0) скажите, пожалуйста, если это логически неправильно, на основе моего кода. – MicroFarad

+0

Я попытался удалить grid.contains(), и он сработал. – MicroFarad

0

Я согласен с Мэттом Ball, создать массив 1-9 и перетасовать, но ответить на ваш вопрос, проблема здесь:

randNum = (int) (Math.random() * 9); 
if (grid.contains(randNum) == false & randNum != 0) { 

Должно быть так:

randNum = (int) (Math.random() * 9) + 1; 
if (grid.contains(randNum) == false) { 

, поскольку вы умножьте Math.random() * 9, вы получите только цифры от 0-8, добавив 1, даст вам 1-9.

0

Вы делаете это неправильно или неосознанно фактически в нескольких местах:

  1. & и & & две разные вещи. Используйте & &, если вы хотите продолжить проверку второго условия, если первый операнд или условие оценивает значение true, иначе для оценки обоих операндов используйте &.

  2. Зачем нужно умножать на 9. Умножьте его на 10. По мере умножения на 9 ограничено только 1-8 числами.

  3. Почему вы печатаете сетку внутри цикла и имеете специальный цикл для того же ?. Просто распечатайте сетку, она покажет вам все элементы.

Ниже исправленная программа:

import java.util.ArrayList; 

public class HelloWorld{ 

    public static void main(String []args){ 
     ArrayList<Integer> grid = new ArrayList<Integer>(); 

    int randNum; 
    int count = 0; 
    int size=8; 

     while (count <= size) { 
     randNum = (int) (Math.random() * 10); 
     System.out.println(randNum+"test"+grid); 
      if (!grid.contains(randNum) && randNum != 0) { 
       System.out.println("grid coming in here"+grid); 
      grid.add(randNum); 
      count++; 

      } 
     } 
    System.out.println(grid); 
    System.out.println("size: " + grid.size()); 
    } 
} 

Надеется, что это помогает!

+0

Я думал, что он будет генерировать nos от 0 ~ 9? – MicroFarad

Смежные вопросы