Java 有没有办法找到发生以下索引错误的原因?
我编写了一个java代码,它有两个向量Java 有没有办法找到发生以下索引错误的原因?,java,vector,Java,Vector,我编写了一个java代码,它有两个向量v1和v2。现在v1和v2都以包的形式(假定)存储数据,其中包含类似v1的格式。添加(“a”,1,2)或v2(“B”,3,4),假定包大小为3。现在,v2将检查其数据包是否已经在v1中。如果存在,则v2将删除该数据包;如果该数据包不在v1中,则该数据包将被添加到v1并从v2中删除。例如,v1[“A”,1,2]和v2[“A”,1,1,“A”,1,2] 现在,v2将从“A”开始。它将在v1中找到A。然后它将转到1。同样,它将转到1,而v2将不会在v1中找到1。它
v1
和v2
。现在v1
和v2
都以包的形式(假定)存储数据,其中包含类似v1的格式。添加(“a”,1,2)
或v2(“B”,3,4)
,假定包大小为3。现在,v2将检查其数据包是否已经在v1中。如果存在,则v2
将删除该数据包;如果该数据包不在v1
中,则该数据包将被添加到v1
并从v2
中删除。例如,v1[“A”,1,2]
和v2[“A”,1,1,“A”,1,2]
现在,v2
将从“A”
开始。它将在v1
中找到A
。然后它将转到1
。同样,它将转到1
,而v2
将不会在v1
中找到1
。它将把(“A”,1,1)
添加到v1
,并将其从v2
中删除。因此,v1
代表[“A”,1,2,“A”,1,1]
,v2
将与[“A”,1,2]
站在一起。现在v2将再次检查[“A”,1,2]
是否在v1
中。程序将从v1
开始检查。它将找到“A”
,然后是1
,然后是2
。因此v2
将从自身中删除[“A”,1,2]
。这是我的密码:
package privatechecker;
import java.util.LinkedList;
import java.util.Vector;
public class Privatechecker {
public static void main(String[] args) {
int a=0,i=0,j=0,b=0,k=0;
Vector v1= new Vector();
Vector v2= new Vector();
v1.add("A");
v1.add(2);
v1.add(3);
v2.add("A");
v2.add(2);
v2.add(3);
v2.add("B");
v2.add(2);
v2.add(3);
v2.add("B");
v2.add(2);
v2.add(3);
v2.add("A");
v2.add(7);
v2.add(38);
v2.add("C");
v2.add(4);
v2.add(5);
v2.add("C");
v2.add(10);
v2.add(5);
v2.add("C");
v2.add(10);
v2.add(5);
do {
for(j=0;j<v1.size()-1;){
if(v2.get(i)== v1.get(j)){
i=i+1;
j=j+1;
a=0;
if(v2.get(i)== v1.get(j)){
i=i+1;
j=j+1;
a=0;
if(v2.get(i)== v1.get(j)){
System.out.println("Deleted "+v2.get(i));
v2.remove(i);
i=i-1;
System.out.println("Deleted "+v2.get(i));
v2.remove(i);
i=i-1;
System.out.println("Deleted "+v2.get(i));
v2.remove(i);
System.out.println("Buffered "+v2);
a=1;
i=0;
j=0;
}
else {
i=i-2;
j=j+1;
a=0;
}
}
else{
i=i-1;
j=j+2;
a=0;
}
}
else {
j=j+3;
i=0;
a=0;
}
}
if(a==0){
System.out.println("Added "+v2.get(i));
v1.add(v2.get(i));
v2.remove(0);
System.out.println("Added "+v2.get(i));
v1.add(v2.get(i));
v2.remove(0);
System.out.println("Added "+v2.get(i));
v1.add(v2.get(i));
v2.remove(0);
System.out.println("Stored "+v1);
System.out.println("Buffer "+v2);
i=0;
}
}
while(v2.isEmpty()==false);
System.out.println("Stored "+v1);
System.out.println("Buffered "+v2);
}
}
我不知道为什么会出现索引错误,因为我键入了几个打印命令来检查向量元素是否正确。它们都是正确的,即使v1和v2具有我想要的确切元素。但是由于错误显示,我无法在循环外打印向量。如何修复此问题?发生此问题是因为v2为空后内部循环继续迭代 考虑以下代码摘录:
do {
for(j=0;j<v1.size()-1;) {
if(v2.get(i)== v1.get(j)) {
...
}
while(v2.isEmpty()==false);
v2.get(i)
,所以我开始寻找v2为空后可以访问的方法,这就是为什么我要查看for循环的退出条件根据算法的设计目的,for循环可能是一个更复杂的情况,因为for循环是您的出路,或者您可能需要重新思考处理循环的方法。我建议重新编写问题陈述可能有助于观众理解问题,从而帮助您解决问题。有没有可能用简单的英语解释目标,而不是解释算法?谢谢问题发生在“for”循环中的最后一个“if”中。在第三个“if”中完成任务后,程序跳转到“for”循环中的最后一个“else”。我不知道为什么会这样。然后在“else”中,它将a的值从1更改为0。然后它跳出for循环,多次执行从v2中删除元素的操作。现在我设置了两个中断条件来阻止这种情况。现在它开始工作了
do {
for(j=0;j<v1.size()-1;) {
if(v2.get(i)== v1.get(j)) {
...
}
while(v2.isEmpty()==false);
v2.get(i);
v1.get(j);