打印2D ArrayList Matrix的值

我有一个2D Arraylist矩阵

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矩阵的值? 任何人都可以建议我一个方法??

您似乎认为您有一个二维数字矩阵,存储为ArrayList 。 那不是你所拥有的。 相反,您有一个二维矩阵,其中每个元素都是一个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列初始化它。 然后它部分填写数字。 只要您访问已经初始化的元素,您就可以了。 试图访问尚未初始化的元素(如table[3][4] )会很糟糕。

初始化数组的另一种方法

 Number[][] table = { { 0, 10 }, { 20, 30 } }; System.out.println("Value=" + table[1][0]); 

这和以前一样,但是一次初始化。 此特定数组只有2行2列。

嵌套的ArrayLists

如果你想使用ArrayList而不是数组,那很好。 您只需要意识到ArrayList实际上将包含其他ArrayLists ,每个ArrayLists都包含Numbers 。 像这样:

 ArrayList> 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)); 

在此示例中,您首先声明一个ArrayList ,其中包含包含Numbers ArrayLists ,并初始化外部ArrayList 。 然后你创建一些内部ArrayLists ,最后给他们每个人一些Numbers

概要

您可以根据需要使用数组或ArrayLists 。 您只需在访问其元素之前正确初始化它们。 如何初始化取决于您选择的数据结构。

所有代码

 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> 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(); } } 

实际的例外是在线

 table[0][0] = new ArrayList(); table[0][1].add(10); 

您正在0,0位置添加元素并尝试将arraylist元素添加到0,1。

因此,nullpointer。

尝试

 public static void main(String[] args) { ArrayList[][] table = new ArrayList[10][10]; table[0][0] = new ArrayList(); table[0][0].add(10); table[0][0].add(20); table[0][0].add(30); System.out.println("Value="+table[0][0].get(1)); } 

要使用ArrayList ,必须首先在角括号中声明ArrayList的类型。 尝试使用以下代码段:

  ArrayList> table = new ArrayList>(); //2d ArrayList ArrayList x = new ArrayList(); 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] 

要插入新行,您必须这样做

 table.add(new ArrayList()); 

并且必须在特定行上追加另一个元素

 table.get(row).add(someValue); 

如果您正在寻找的不仅仅是玩具项目,您应该认真考虑使用一些外部矩阵库。 arrays在维护方面会很痛苦。

我可以推荐EJML 。 使用此库,您的代码将如下所示:

 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)); 

此外,您很可能必须在矩阵内进行一些计算。 图书馆将为基本图书馆提供一些支持,并为您节省一些时间。