Java 打印二维ArrayList矩阵的值

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 错误发生

我有一个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
错误发生在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();
  }
}