Java - 获取编译错误不兼容的类型int无法转换为[] []

时间:2017-04-16 07:57:21

标签: java arrays matrix

无法理解编译错误。主要应保持不变。我相信MakeandFillMatix方法是问题,我无法弄清楚。我认为这就是我创建方法的方式。

import java.util.*;
/*

*/
public class TesterProject
{
    public static void main(String [] args)
    {
        int n = getMatrixSize();
        int[][] m = makeAndFillMatrix(n);
        printMatrix(m);
    }
    public static int getMatrixSize()
    {
        Scanner S = new Scanner(System.in);

        System.out.println("give me a int to create the matrix");
        int n = S.nextint();
        return n;
    }
    public static void makeAndFillMatrix(int [][] r)
    {
        Random generator = new Random(5);
        int rand = generator.nextInt(10);
        for(int i = 0; i < r.length; i++)
        {
            for(int j = 0; j < r; j++)
            {
                r[i][j]= rand;
            }
        }
        return r;
    }
    public static void printMatrix(int [][] matrix)
    {
        for(int r = 0; r < matrix.length; r++)
        {
            for(int c = 0; c < matrix[r].length; c++)
            {
                System.out.print(matrix[r][c] + " ");
            }
            System.out.println();
        }
    }
}

4 个答案:

答案 0 :(得分:2)

<强>提示

您的代码中存在许多问题:

  1. int n = S.nextint();它应该是int n = S.nextInt();与Upper I
  2. 你不能将int与数组for (int j = 0; j < r; j++) {进行比较我认为你需要这个for (int j = 0; j < i; j++) {
  3. void makeAndFillMatrix(int[][] r)它不返回任何内容,最后返回一个数组。
  4. makeAndFillMatrix(int[][] r)取一个2D数组而不是int int[][] m = makeAndFillMatrix(n);
  5. 解决此问题并解决您的问题:)

    修改

    然后你必须改变你的代码:

    public static void main(String[] args) {
        int n = getMatrixSize();
        int[][] m = makeAndFillMatrix(n);//<<<----Problem 4
        printMatrix(m);
    }
    
    public static int getMatrixSize() {
        Scanner S = new Scanner(System.in);
    
        System.out.println("give me a int to create the matrix");
        int n = S.nextInt();//<<--------------Problem 1
        return n;
    }
    
    public static int[][] makeAndFillMatrix(int n) {//<<<---Problem 3
        Random generator = new Random(5);
        int[][] r = new int[n][n];
        int rand = generator.nextInt(10);
        for (int i = 0; i < r.length; i++) {
            for (int j = 0; j < i; j++) {//<<<-----------Problem 2
                r[i][j] = rand;
            }
        }
        return r;
    }
    
    public static void printMatrix(int[][] matrix) {
        for (int r = 0; r < matrix.length; r++) {
            for (int c = 0; c < matrix[r].length; c++) {
                System.out.print(matrix[r][c] + " ");
            }
            System.out.println();
        }
    }
    

答案 1 :(得分:0)

makeAndFillMatrix(int[][] r)更改为makeAndFillMatrix(int r) 你想要矩阵大小,这是一个整数,所以取整数而不是多维数组。

在之后的for循环中,将r.length更改为r

在方法声明中将void更改为int [][]

在方法中添加一行int[][] q;并将r[i][j] = rand更改为q[i][j] = rand

return r更改为return q

答案 2 :(得分:0)

你试图将'int'(在main函数中)转换为'int [] []'('makeAndFillMatrix'的参数。另外,makeAndFillMatrix返回'void'。

我相信你想把你的功能改写成这样的东西:

public static int[][] makeAndFillMatrix(int r)
{
    // Create a new matrix
    int[][] matrix = new int[r][r];
    // Get a random value
    Random generator = new Random(5);
    int rand = generator.nextInt(10);
    // Assign random value to each cell of the matrix
    for(int i = 0; i < r; i++)
    {
        for(int j = 0; j < r; j++)
        {
            r[i][j] = rand;
        }
    }
    // Return the matrix
    return matrix;
}

答案 3 :(得分:0)

您收到的错误是由于您致电

int[][] m = makeAndFillMatrix(n);

在您的主要方法中。

您在上面的行中将n设置为int,意味着n是数字,但是makeAndFillMatrix(int[][])接收int的2d数组。 (顺便说一句,2d数组是一个矩阵。)

如果您想制作用户输入的大小的矩阵,那么您需要传入矩阵n传递到makeAndFillMatrix方法中em> of size n 。你可以用两种方式做到这一点。选项1是将矩阵传递给makeAndFillMatrix方法,如下所示:

public static void main(String [] args)
{
    int n = getMatrixSize();
    int[][] m = makeAndFillMatrix(new int[n][n]); // new int matrix of size n
    printMatrix(m);
}

或者(在我看来,更传统的方式),你可以给makeAndFillMatrix矩阵的大小(就像你正在做的那样),你可以makeAndFillMatrix制作数组:

public static void makeAndFillMatrix(int matrixSize)
{
    int[][] r = new int[matrixSize][matrixSize];
    Random generator = new Random(5);
    int rand = generator.nextInt(10);
    for(int i = 0; i < r.length; i++)
    {
        for(int j = 0; j < r[i].length; j++) //~~~I modified this line as well~~~
        {
            r[i][j]= rand;
        }
    }
    return r;
}

无论如何,你可以选择你想要采用哪种方法解决这个问题,但无论如何,我注意到你的makeAndFillMatrix方法有错误。我修复了它并写了//~~~I modified this line as well~~~

你的内部for循环最初说for(int j = 0; j < r; j++),但r是一个矩阵。对于内部循环,您可能希望增加j,直到它达到矩阵中当前行的大小,因此我也更改了该行。 (您的内循环在printMatrix方法中是正确的。)无论您针对第一个问题采取哪种方法,您的makeAndFillMatrix方法中的内循环也需要进行修改。

我希望这有帮助!