亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

同一行沒有重復數字的多維數組

同一行沒有重復數字的多維數組

江戶川亂折騰 2021-09-12 16:46:34
  int matrice2 [][] = new int [5][5];  for (int i=0;i<5;i++) {      System.out.println(" ");      for(int j=0;j<5;j++) {          matrice2[i][j] = (int)(Math.random()*10);          System.out.print(" "+matrice2[i][j]+" ");      }  }  System.out.println(" ");  System.out.println(" ");  for (int i=0;i<5;i++) {      System.out.println(" ");      for(int j=0;j<5;j++) {          for (int k=0;k<5;k++) {              if(j!=k) {                  if (matrice2[i][j]==matrice2[i][k]) {                      matrice2[i][k]=(int)(Math.random()*10);                  }              }          }          System.out.print(" "+matrice2[i][j]+" ");      }  }我想制作一個多維數組,而在同一行中沒有任何重復的數字,因此該列是否有重復的數字并不重要。我在這里所做的是生成方形的 5x5 數組。將索引“j”作為與索引“k”中的數字進行比較的索引,如果存在與索引“j”中包含的數字相等的數字,則檢查整行。所以我唯一的問題是,在檢測到“k”中的數字等于“j”中的數字后,索引“k”中的數字將生成一個新數字來替換“k”中的當前數字,但結果在控制臺顯示原始 5x5 數組(在更改之前是數組的第一個形式)已更改,但已替換的數字生成的數字已經存在,即使它應該繼續更改,直到“k”無法檢測到任何重復的數字。我可以想到其他方法,但我真的很想知道為什么它不起作用,盡管我真的認為它不應該帶來任何問題,但我可能錯過了一些東西。這是不應該發生的結果示例。從9 1 3 8 45 3 2 4 89 8 5 6 56 3 0 8 72 8 6 3 9到9 1 3 8 45 3 2 4 89 8 5 6 96 3 0 8 72 8 6 3 9它不應該發生,因為“k”應該從索引 0 開始到 4 看到它。雖然“j”在索引 4 中,而“k”在索引 0 中,它應該立即檢測到它并將“k”中的數字更改為其他隨機數。編輯:我看到你們展示的不同方式,但我要求的是在不使用任何導入的情況下提供更好的解決方案。我們的老師給了我們這個作業,告訴我們沒有使用任何這些導入,這使得它變得更加復雜,但這正是我們所要求的。我嘗試了一段時間,但仍然沒有發生任何變化。
查看完整描述

3 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

我以不同的方式編輯了您的代碼。我寫了一些注釋來清楚地理解代碼。請嘗試一下。


public class UniqueMatrix {

    public static void main(String[] args) {


        int matrix[][] = new int[5][5];

        boolean uniqeMatrixFound = false;

        while (!uniqeMatrixFound) {

            //fill matrix until uniqe matrix found value is true 

            fillMatrix(matrix);

            for (int i = 0; i < matrix.length; i++) {

                HashSet<Integer> columnNumber = new HashSet<>();

                for (int j = 0; j < matrix.length; j++) {

                    columnNumber.add(matrix[j][i]);

                }

                //if set size not equal to matrix size , create an new uniqe matrix with breaking false value

                if (columnNumber.size() != matrix.length) {

                    uniqeMatrixFound = false;

                    break;

                }

                uniqeMatrixFound = true;

            }

        }


        //print an array 

        for (int i = 0; i < matrix.length; i++) {

            System.out.println(" ");

            for (int j = 0; j < matrix.length; j++) {

                System.out.print(" " + matrix[i][j] + " ");

            }

        }


    }


    //create a matrix with unique value in all rows.

    private static void fillMatrix(int[][] matrice2) {

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

        for (int i = 0; i < 10; i++) {

            list.add(i);

        }

        for (int i = 0; i < matrice2.length; i++) {

            Collections.shuffle(list);

            for (int j = 0; j < matrice2.length; j++) {

                matrice2[i][j] = list.get(j);

            }

        }

    }


}



查看完整回答
反對 回復 2021-09-12
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

我閱讀您的邏輯的方式是,當您找到重復項時,您會生成一個新數字,并且該新數字將在外 ( j) 循環的下一次迭代中進行驗證。問題是j==k因為該數字不會被驗證,通常這不是問題,因為j會增加然后該數字將被驗證,j==4因為那是最后一次迭代的時間除外。

因此,修改最右邊的列并且不會檢查該值,因為 'j==k' 永遠不會為假。


查看完整回答
反對 回復 2021-09-12
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

這是解決問題的不同方法,它使用混洗的 ArrayList 而不是檢查當前行中是否存在值。


int matrice2[][] = new int[5][5];

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


for (int i = 0; i < 10; i++)

    sourceMatrix.add(i);


//generate random matrix using shuffled arraylist

for (int i = 0; i < matrice2.length; i++) {

    Collections.shuffle(sourceMatrix);

    for (int j = 0; j < matrice2[i].length; j++) {

        matrice2[i][j] = sourceMatrix.get(j);

    }

}


//print generated matrix

for (int i = 0; i < matrice2.length; i++) {

    for (int j = 0; j < matrice2[i].length; j++) {

        System.out.print(matrice2[i][j]);

    }

    System.out.println();

}


查看完整回答
反對 回復 2021-09-12
  • 3 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號