簡體   English   中英

2布爾檢查不兼容

[英]2 boolean check aren't compatible

嘗試創建一個方法,該方法將構成一個數組,並為數組的每個索引分配從1到9的不同數字(編號不能重復)。 請看一下我所做的布爾比較,這是cmd在運行時卡住的地方。 我試圖將兩者分開,但沒有任何反應。

請幫忙。

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());
  }
 }

為什么不使用Fisher-Yates隨機播放呢?

也就是說,用1-9填充數組,然后用Collections.shuffle()填充它。


除了:在原始代碼中使用&&而不是&

我同意Matt 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乘以1,所以您只會得到0-8到8之間的數字,加1則會得到1-9

您實際上在幾個地方做錯了或不知不覺中:

  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());
  }
}

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM