打印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));
此外,您很可能必须在矩阵内进行一些计算。 图书馆将为基本图书馆提供一些支持,并为您节省一些时间。