3 回答

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
我以不同的方式編輯了您的代碼。我寫(xiě)了一些注釋來(lái)清楚地理解代碼。請(qǐng)嘗試一下。
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);
}
}
}
}

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
我閱讀您的邏輯的方式是,當(dāng)您找到重復(fù)項(xiàng)時(shí),您會(huì)生成一個(gè)新數(shù)字,并且該新數(shù)字將在外 ( j
) 循環(huán)的下一次迭代中進(jìn)行驗(yàn)證。問(wèn)題是j==k
因?yàn)樵摂?shù)字不會(huì)被驗(yàn)證,通常這不是問(wèn)題,因?yàn)?code>j會(huì)增加然后該數(shù)字將被驗(yàn)證,j==4
因?yàn)槟鞘亲詈笠淮蔚臅r(shí)間除外。
因此,修改最右邊的列并且不會(huì)檢查該值,因?yàn)?'j==k' 永遠(yuǎn)不會(huì)為假。

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是解決問(wèn)題的不同方法,它使用混洗的 ArrayList 而不是檢查當(dāng)前行中是否存在值。
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();
}
添加回答
舉報(bào)