&引用;找不到符号“;测试Java代码时
我已经开始编写一个类来为矩阵建模,编译器给了我以下消息: Matrix.java:4: cannot find symbol symbol : constructor Matrix(int[][]) location: class Matrix Matrix y = new Matrix(x); Matrix.java:4:找不到符号 符号:构造函数矩阵(int[]] 位置:类别矩阵 矩阵y=新矩阵(x); 这是我试图编译的代码:&引用;找不到符号“;测试Java代码时,java,compiler-errors,Java,Compiler Errors,我已经开始编写一个类来为矩阵建模,编译器给了我以下消息: Matrix.java:4: cannot find symbol symbol : constructor Matrix(int[][]) location: class Matrix Matrix y = new Matrix(x); Matrix.java:4:找不到符号 符号:构造函数矩阵(int[]] 位置:类别矩阵 矩阵y=新矩阵(x); 这是我试图编译的代码: public class Matrix<E>
public class Matrix<E> {
public static void main(String[] args) {
int[][] x = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
Matrix y = new Matrix(x);
System.out.println(y.getRows());
System.out.println(y.getColumns());
}
private E[][] matrix;
public Matrix(E[][] matrix) {this.matrix = matrix;}
public E[][] getMatrix() {return matrix;}
public int getRows(){return matrix.length;}
public int getColumns(){return matrix[0].length;}
}
公共类矩阵{
公共静态void main(字符串[]args){
int[]x={{1,2,3},{1,2,3},{1,2,3},{1,2,3},{1,2,3};
矩阵y=新矩阵(x);
System.out.println(y.getRows());
System.out.println(y.getColumns());
}
私有E[][]矩阵;
公共矩阵(E[][]矩阵){this.Matrix=Matrix;}
公共E[]getMatrix(){return matrix;}
public int getRows(){return matrix.length;}
public int getColumns(){返回矩阵[0].length;}
}
所以,我的问题是,为什么会出现这个错误,我应该修改什么来修复这个错误?Java中没有通用的数组创建。请参见Java中没有通用数组创建。请参见尝试使用
Integer[][]
而不是int[][]
。构造函数需要前者(因为没有基元类型参数),而要传递后者。尝试使用Integer[][]
而不是int[][]
。您的构造函数需要前者(因为没有基元类型参数),而您要传递的是后者。如下所示:
public class Matrix<E> {
public static void main(String[] args) {
Integer [][] x = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {0, 1, 0}};
Matrix<Integer> y = new Matrix<Integer>(x);
System.out.println(y.getRows());
System.out.println(y.getColumns());
System.out.println("before: " + y);
Integer [][] values = y.getMatrix();
values[0][0] = 10000;
System.out.println("after : " + y);
}
private E[][] matrix;
public Matrix(E[][] matrix) {this.matrix = matrix;}
public E[][] getMatrix() {return matrix;}
public int getRows(){return matrix.length;}
public int getColumns(){return matrix[0].length;}
public String toString()
{
StringBuilder builder = new StringBuilder(1024);
String newline = System.getProperty("line.separator");
builder.append('[');
for (E [] row : matrix)
{
builder.append('{');
for (E value : row)
{
builder.append(value).append(' ');
}
builder.append('}').append(newline);
}
builder.append(']');
return builder.toString();
}
}
公共类矩阵{
公共静态void main(字符串[]args){
整数[][]x={{1,2,3},{4,5,6},{7,8,9},{0,1,0};
矩阵y=新矩阵(x);
System.out.println(y.getRows());
System.out.println(y.getColumns());
System.out.println(“之前:+y”);
整数[][]值=y.getMatrix();
数值[0][0]=10000;
System.out.println(“之后:+y”);
}
私有E[][]矩阵;
公共矩阵(E[][]矩阵){this.Matrix=Matrix;}
公共E[]getMatrix(){return matrix;}
public int getRows(){return matrix.length;}
public int getColumns(){返回矩阵[0].length;}
公共字符串toString()
{
StringBuilder=新的StringBuilder(1024);
字符串newline=System.getProperty(“line.separator”);
builder.append('[');
对于(E[]行:矩阵)
{
append('{');
对于(E值:行)
{
builder.append(value.append(“”);
}
append('}').append(换行符);
}
builder.append(']');
返回builder.toString();
}
}
编译并在我的机器上运行
您需要考虑其他事项:封装以及“private”何时不是private。查看对代码的修改,看看我是如何修改您的“私有”矩阵的。像这样尝试:
public class Matrix<E> {
public static void main(String[] args) {
Integer [][] x = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {0, 1, 0}};
Matrix<Integer> y = new Matrix<Integer>(x);
System.out.println(y.getRows());
System.out.println(y.getColumns());
System.out.println("before: " + y);
Integer [][] values = y.getMatrix();
values[0][0] = 10000;
System.out.println("after : " + y);
}
private E[][] matrix;
public Matrix(E[][] matrix) {this.matrix = matrix;}
public E[][] getMatrix() {return matrix;}
public int getRows(){return matrix.length;}
public int getColumns(){return matrix[0].length;}
public String toString()
{
StringBuilder builder = new StringBuilder(1024);
String newline = System.getProperty("line.separator");
builder.append('[');
for (E [] row : matrix)
{
builder.append('{');
for (E value : row)
{
builder.append(value).append(' ');
}
builder.append('}').append(newline);
}
builder.append(']');
return builder.toString();
}
}
公共类矩阵{
公共静态void main(字符串[]args){
整数[][]x={{1,2,3},{4,5,6},{7,8,9},{0,1,0};
矩阵y=新矩阵(x);
System.out.println(y.getRows());
System.out.println(y.getColumns());
System.out.println(“之前:+y”);
整数[][]值=y.getMatrix();
数值[0][0]=10000;
System.out.println(“之后:+y”);
}
私有E[][]矩阵;
公共矩阵(E[][]矩阵){this.Matrix=Matrix;}
公共E[]getMatrix(){return matrix;}
public int getRows(){return matrix.length;}
public int getColumns(){返回矩阵[0].length;}
公共字符串toString()
{
StringBuilder=新的StringBuilder(1024);
字符串newline=System.getProperty(“line.separator”);
builder.append('[');
对于(E[]行:矩阵)
{
append('{');
对于(E值:行)
{
builder.append(value.append(“”);
}
append('}').append(换行符);
}
builder.append(']');
返回builder.toString();
}
}
编译并在我的机器上运行
您需要考虑其他事项:封装以及“private”何时不是private。查看对代码的修改,看看我如何修改您的“私有”矩阵。谢谢,我的机器也可以编译和运行。我想在开始学习泛型之前,我应该多读一点泛型的语法,所以对于你接受答案的速度有一个时间限制。我之前试过了,但我得等一会儿才能接受(除非有人提出了一个超级惊人的答案,证明上帝粒子的存在或类似疯狂的事情)谢谢,我的机器也编译并运行了。我想在开始学习泛型之前,我应该多读一点泛型的语法,所以对于你接受答案的速度有一个时间限制。我之前试过了,但是我需要等一段时间才能接受(除非其他人提出了一个超级惊人的答案,证明了上帝粒子的存在或者类似疯狂的东西),这与我在这门课上所做的并不相关。这与我在这门课上所做的并不相关。为什么这是上等票?真正的问题是缺少类型声明的泛型部分。这个答案不中肯,为什么要投票?真正的问题是缺少类型声明的泛型部分。这个答案没有抓住要点。