簡體   English   中英

如何使用數組創建隨機矩陣

[英]How to create a random matrix using arrays

我想使用數組和Arrays.fill方法創建一個隨機的5x5矩陣。 這是我所做的:

import java.util.*;

class RandomMatrix {
    public static void main (String  [] args) {

        int i,j;
        int [] [] matrix = new int [5] [5];
        Arrays.fill (matrix, (int) Math.random()*10);

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

                System.out.printf("%-5d", matrix [i][j]);
            }           
            System.out.println();
        }           
    }
}

我實際上以為這樣可以工作,但是現在我得到了這個錯誤:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
    at java.util.Arrays.fill(Unknown Source)
    at RandomMatrix.main(RandomMatrix.java:8)

使用與打印矩陣相同的循環結構。

for (int i=0; i<matrix.length; i++) {
    for (int j=0; j<matrix[i].length; j++) {
        matrix[i][j] = (int) (Math.random()*10);
    }           
}

Arrays.fill()適用於數組,您的矩陣是由數組組成的數組。 即使您使用了Arrays.fill (matrix[0], (int) Math.random()*10); ,您可以將相同(隨機選擇)的值放入第0行的每個單元格中。

我認為您遇到了錯誤,因為方法fill()無法與多維數組一起使用。 只需將其轉換為:

for(int k = 0;k<5;k++){
        int[] example = matrix[k];
        Arrays.fill (example, new Random().nextInt(10)*10);
 }
    int[][] m = new int[5][5];

    //https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#fill-int:A-int-
    //public static void fill(**int[]** a,  int val)
    for(int[] r : m)
        Arrays.fill(r, (int) (Math.random()*10));

    for (int i = 0; i < m.length; i++) {
        for (int j = 0; j < m.length; j++) {
            System.out.print(m[i][j] + " ");
        }
        System.out.println("");
    }

    System.out.println("Second");

    for (int i = 0; i < m.length; i++) {
        for (int j = 0; j < m.length; j++) {
            m[i][j] = (int) (Math.random()*10);
        }
    }       

    for (int i = 0; i < m.length; i++) {
        for (int j = 0; j < m.length; j++) {
            System.out.print(m[i][j] + " ");
        }
        System.out.println("");
    }
Output:
3 3 3 3 3 
4 4 4 4 4 
7 7 7 7 7 
2 2 2 2 2 
8 8 8 8 8 
Second
0 0 4 9 1 
5 8 6 3 8 
5 7 3 5 1 
1 1 6 4 8 
6 2 1 4 0 

Arrays.fill()填充數組。 您的矩陣是一個數組數組,所以不要寫

Arrays.fill (matrix, (int) Math.random()*10);

你也可以寫

int a = (int) Math.random()*10;
matrix[0] = a; //doesn't work, matrix[0] is an int array!
matrix[1] = a; //doesn't work, matrix[0] is an int array!

等等。 看看為什么它不起作用? 這有兩種錯誤。 首先,fill()不支持嵌套數組,其次,fill將值作為參數而不是供應商。

暫無
暫無

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

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