首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java -获取编译错误不兼容类型int不能转换为[][]

Java -获取编译错误不兼容类型int不能转换为[][]
EN

Stack Overflow用户
提问于 2017-04-16 07:57:21
回答 3查看 1.5K关注 0票数 0

理解编译错误有困难。主应该保持不变。我相信MakeandFillMatix方法是问题所在,我无法解决它。我想这就是我创造这个方法的方式。

代码语言:javascript
复制
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();
        }
    }
}
EN

回答 3

Stack Overflow用户

发布于 2017-04-16 08:04:44

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

票数 0
EN

Stack Overflow用户

发布于 2017-04-16 08:11:20

您正在尝试将'int‘(在主函数中)转换为'int’( 'makeAndFillMatrix‘的参数)。此外,makeAndFillMatrix还返回“void”。

我相信你想把你的函数重写成这样的东西:

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2017-04-16 08:17:45

您正在接收的错误是由于您调用

代码语言:javascript
复制
int[][] m = makeAndFillMatrix(n);

在你的主要方法中。

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

如果要生成用户输入的大小矩阵,则不需要将n传递到makeAndFillMatrix方法中,而是需要传递大小为n的矩阵。你可以用两种方式来做。选项1是将矩阵传递给makeAndFillMatrix方法,如下所示:

代码语言:javascript
复制
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制作数组:

代码语言:javascript
复制
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;
}

无论如何,您可以自行选择解决这个问题的方法,但是无论如何,我注意到您的方法有一个错误。

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

我希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43435057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档