1)我无法读取Column Wise列表中的元素,因为Column的大小是可变的。
2)我有10个数据库,并将这10个数据库信息中的每一个存储在一个列表中。数据库中的每个列表都可以有可变长度。
拥有可变数据。
我可以在列表中插入元素。但我无法读取Column Wise列表中的元素,但行是固定的。
例如:让我们说元素可以是任何元素。
1 2 3
1 2 3 4 5
1 2
1 2 4
我需要输出为1,1,1,1,2,2,2,2,3,3,4,5,5
任何人都可以指导我如何获得?
MyUnderstanding
我尝试了以下方法并像这样编码
我 mycode的:
int ar[][] = new int[10][]; //Created a 2Dimensional Array
//The Size of the row is fixed but not for Columns(as it is variable)
ArrayList<Object> al = new ArrayList<Object>();
ArrayList<<Object> al1 = new ArrayList<Object>();
ArrayList<Object> al4 = new ArrayList<Object>();
for (int j = 0; j < ar.length; j++) //This loop is for generating each database
{
System.out.println("Enter the Size of the list" + j);
String s1 = sc.next();
int i = Integer.parseInt(s1);
for (int k = 0; k < i; k++) //This loop is for generating the elements size inside each database
{
System.out.println("Enter the Elements of the list" + j);
String s2 = sc.next();
al1.add(s2); //I store these elements in a list
ar[i] = new int[al1.size()];
al.add(al1); //Finally store a list in a SeperateList
}
}
System.out.println("Reading each elements of the ArrayList");
主要问题
ListIterator ltr = al.listIterator(); // Used ListIterator to extract
// each
// List from the 10 list.
for (int i = 0; i < 10; i++)
{
for (int l = 0; l < ar[i].length; l++)
{
while (ltr.hasNext()) // A list AL having 10 Databases.
{
ArrayList a0to9 = (ArrayList) ltr.next();// I have taken 1 listfrom the 10 Databases.
ListIterator ltr1 = a0to9.listIterator(); // Used ListIterator to extract each Element from the List.
while (ltr1.hasNext()) // If the first List contains the elements (the elements are stored in the form of list)
{
ArrayList elements = (ArrayList) ltr1.next(); // If the list has elements we can extract that Object
al4.add(elements); //And store the elements in another list
break;
}
}
}
}
但是我得到了下面的输出
Output:
Exception in thread "main" java.lang.NullPointerException
at LockWaitTimeoutTest.main(LockTest.java:48)
任何人都可以指导我如何解决这个问题。
提前谢谢:)
答案 0 :(得分:0)
开始时要做的几件事:
for (int j = 0; j < ar.length; j++)
{
System.out.println("Enter the Size of the list" + j);
String s1 = sc.next();
int i = Integer.parseInt(s1);
for (int k = 0; k < i; k++) {
System.out.println("Enter the Elements of the list" + j);
String s2 = sc.next();
al1.add(s2);
ar[i] = new int[al1.size()];
al.add(al1);
}
}
al1
周期内分配for
,因此它最终会包含Enter the Elements of the list
提示的每个答案al1
周期内分配for
,因此al
列表中的每个项目都会指向相同的列表j
,因此对ar
的赋值将始终覆盖先前外循环迭代中的值al1
追加一个新元素,al1.size()
将在每次内部迭代中增长1 答案 1 :(得分:0)
首先,您不应该使用raw types
。您应该准确指定列表要保留的类型。相反,您可以插入所有元素(Object
),如果插入的元素类型超出预期,可能不会注意到。
这也是你的问题所在。 al
的真实结构是ArrayList<ArrayList<String>>
。由于您使用al
向al.add(al1);
添加了列表。 al1
是ArrayList<String>
,因为您在String
添加了al1.add(s2);
。
到目前为止一切顺利,问题出在哪里?处理时,您希望al1
保留ArrayList
而不是String
。
al.listIterator() --> (ArrayList) ltr.next() // ltr iterates over al
a0to9.listIterator() --> (ArrayList) ltr1.next(); // ltr1 iterates over al1
下次你应该使用泛型而不是原始类型,这样你就可以立即获得CompileError
并确切地看到问题所在:)
另一方面,您可能更容易使用extended-for-loop
而不是ListIterator
。它是如何工作的?这是一个例子:
List<Element> list = ...;
...
for (Element element : list) {
System.out.println(element);
}
如果您需要索引,可以这样做:
ArrayList<Element> list = ...;
...
for (int i = 0; i < list.size(); i++) {
System.out.println("Index: " + i + ", Element: " + list.get(i));
}
但请注意,如果List
具有缓慢的直接访问权限,则速度非常慢。 ArrayList
具有快速直接访问权限,因为它知道哪些元素在给定索引处。对于LinkedList
,您应该使用Iterator
,因为它没有直接访问权限。
总结:请勿使用raw types
之类的ArrayList myList
,而应使用ArrayList<String> myList
之类的泛型。那么下次调试这些东西时你就不会有问题了。