无法理解编译错误。主要应保持不变。我相信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();
}
}
}
答案 0 :(得分:2)
<强>提示强>
您的代码中存在许多问题:
int n = S.nextint();
它应该是int n = S.nextInt();
与Upper I for (int j = 0; j < r; j++) {
进行比较我认为你需要这个for (int j = 0; j < i; j++) {
void makeAndFillMatrix(int[][] r)
它不返回任何内容,最后返回一个数组。makeAndFillMatrix(int[][] r)
取一个2D数组而不是int int[][] m = makeAndFillMatrix(n);
解决此问题并解决您的问题:)
修改强>
然后你必须改变你的代码:
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数组是一个矩阵。)
如果您想制作用户输入的大小的矩阵,那么您需要传入矩阵1}},而不是将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
方法中的内循环也需要进行修改。
我希望这有帮助!