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。它

我编写了一个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
。它将把
(“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);