Java 打印二维ArrayList矩阵的值
我有一个2D数组列表矩阵,比如Java 打印二维ArrayList矩阵的值,java,arraylist,Java,Arraylist,我有一个2D数组列表矩阵,比如 ArrayList[][] table = new ArrayList[10][10]; table[0][0] = new ArrayList(); table[0][1].add(10); table[1][0].add(20); table[1][1].add(30); System.out.println("Value="+table[1][0].get()); //error line 错误发生
ArrayList[][] table = new ArrayList[10][10];
table[0][0] = new ArrayList();
table[0][1].add(10);
table[1][0].add(20);
table[1][1].add(30);
System.out.println("Value="+table[1][0].get()); //error line
错误发生在System.out.println行中。
如何打印arraylist矩阵的值??
有人能给我推荐一种方法吗?实际的例外情况是
table[0][0] = new ArrayList();
table[0][1].add(10);
您正在0,0位置添加元素,并尝试在0,1位置添加arraylist元素
因此是空指针
试一试
要使用
ArrayList
,必须首先在角括号中声明ArrayList
的类型。请尝试使用以下代码段:
ArrayList<ArrayList<Integer>> table = new ArrayList<ArrayList<Integer>>(); //2d ArrayList
ArrayList<Integer> x = new ArrayList<Integer>();
x.add(10);
x.add(20);
table.add(x);
table.add(x);
System.out.println("Value="+table); //Prints table[][]
System.out.println("Value="+table.get(0)); //Prints table[0]
System.out.println("Value="+table.get(0).get(1)); //Prints table [0][1]
如果你正在寻找比玩具项目更多的东西,你应该认真考虑使用一些外部矩阵库。阵列在维护时会很痛苦 我可以推荐。使用此库后,您的代码将如下所示:
BlockMatrix64F matrix = new BlockMatrix64F(10, 10);
matrix.set(0,1,10);
matrix.set(1,0,20);
matrix.set(1,1,30);
System.out.println("Value="+matrix.get(1,0));
此外,您很可能需要在矩阵中进行一些计算。库将支持一些基本的,并将为您节省一些时间。您似乎认为您有一个二维数字矩阵,存储为
数组列表。那根本不是你所拥有的。相反,您有一个二维矩阵,其中每个元素都是一个ArrayList
。这意味着您的代码中确实有3个维度。我认为那不是你想要的。有几种方法可以使用已有的构造实现二维(即,无需访问某些外部库)
二维数字数组
数组是一个易于理解的构造,因此让我们从它开始
Number[][] table = new Number[10][10];
table[0][0] = 0;
table[0][1] = 10;
table[1][0] = 20;
table[1][1] = 30;
System.out.println("Value="+table[1][0].get());
此代码声明一个类型为Number
的二维数组,然后用10行10列对其进行初始化。然后部分填充数字。只要访问一个已经初始化的元素,就可以了。试图访问尚未初始化的元素(如表[3][4]
)将是错误的
初始化数组的另一种方法
这与之前的操作相同,但一次初始化了所有内容。此特定数组只有2行和2列
嵌套数组列表
如果您想使用ArrayList
而不是数组,这很好。您只需要意识到ArrayList
实际上将包含其他ArrayList
,每个列表都将包含数字。像这样:
ArrayList<ArrayList<Number>> table = new ArrayList<>();
table.add(new ArrayList<>());
table.add(new ArrayList<>());
table.get(0).add(0);
table.get(0).add(10);
table.get(1).add(20);
table.get(1).add(30);
System.out.println("Value=" + table.get(1).get(0));
您的意思是在表[0][1]中没有出现错误。是否添加(10)
?考虑到它还没有被初始化,这会很奇怪。@KumarSaurabh声明是正确的。只有get()
method@sᴜʀᴇsʜᴀᴛᴛᴀ 事实上,库马尔可能了解了真正的问题。似乎OP认为他有一个10x10的2D数字列表,而不是一个10x10的数字列表数组(实际上是原始列表…)@realponsum Nope。索引混乱。在一个地方添加并访问另一个地方。看看我的答案。我尝试使用1和0,但我得到了空指针异常。我不知道如何从表[1][0]中获取值@Suresh我尝试使用索引和get(1)。get(0),但它仍然提供空指针exception@vineethPrabhakaran等待查看行表[0][0]=new ArrayList();表[0][0]。添加(10)代码>和索引。我更改了您的代码并进行了更新。请跑过去看看有什么不同。
BlockMatrix64F matrix = new BlockMatrix64F(10, 10);
matrix.set(0,1,10);
matrix.set(1,0,20);
matrix.set(1,1,30);
System.out.println("Value="+matrix.get(1,0));
Number[][] table = new Number[10][10];
table[0][0] = 0;
table[0][1] = 10;
table[1][0] = 20;
table[1][1] = 30;
System.out.println("Value="+table[1][0].get());
Number[][] table = { { 0, 10 }, { 20, 30 } };
System.out.println("Value=" + table[1][0]);
ArrayList<ArrayList<Number>> table = new ArrayList<>();
table.add(new ArrayList<>());
table.add(new ArrayList<>());
table.get(0).add(0);
table.get(0).add(10);
table.get(1).add(20);
table.get(1).add(30);
System.out.println("Value=" + table.get(1).get(0));
import java.util.ArrayList;
public class TwoD {
public void example1() {
Number[][] table = new Number[10][10];
table[0][0] = 0;
table[0][1] = 10;
table[1][0] = 20;
table[1][1] = 30;
System.out.println("\nExample 1");
System.out.println("Value=" + table[1][0]);
}
public void example2() {
Number[][] table = { { 0, 10 }, { 20, 30 } };
System.out.println("\nExample 2");
System.out.println("Value=" + table[1][0]);
}
public void example3() {
ArrayList<ArrayList<Number>> table = new ArrayList<>();
table.add(new ArrayList<>());
table.add(new ArrayList<>());
table.get(0).add(0);
table.get(0).add(10);
table.get(1).add(20);
table.get(1).add(30);
System.out.println("\nExample 3");
System.out.println("Value=" + table.get(1).get(0));
}
public static void main(String[] args) {
TwoD me = new TwoD();
me.example1();
me.example2();
me.example3();
}
}