2015-03-25 76 views
0

下面的程序应执行10次,每次要求用户输入一对坐标。我将x和y坐标存储在两个独立的数组列表中。 程序应该能够检查一对坐标是否已经输入多次。如果发生这种情况,应该打印一条消息。 我的程序表现得特别时尚。除此之外,它似乎多次打印出消息。其次,如果用户输入一对坐标,我希望程序打印出一个味精说'错对'。我尝试在if后插入else语句,但那不行。总之,每次输入一对时,程序应该说'错误的对',但是如果输入了重复,它应该只是说'已经进入'了。我该怎么做?检查一个arraylist中两个连续坐标对在java中是否相等

public static void main(String[]args) 
{ 
    Scanner a=new Scanner(System.in); 

    //Arraylist stores all entered x values. 
    ArrayList<Integer> XValues=new ArrayList<Integer>(); 
    //Arraylist stores all entered y values. 
    ArrayList<Integer> YValues=new ArrayList<Integer>(); 

    for(int i=0;i<10;i++) 
    { 
     int xval; 
     int yval; 

     System.out.println("Try no. #"+(i+1)); 
     System.out.print("Please enter x coordinate: "); 
     xval=a.nextInt(); 
     System.out.print("Please enter y coordinate: "); 
     yval=a.nextInt(); 

     if(i>1) 
     { 
      for(int c=0;c<XValues.size();c++) 
      { 
       for(int d=0;d<YValues.size();d++) 
       { 
        XValues.get(c); 
        YValues.get(d); 

        if(xval==XValues.get(c) && yval==YValues.get(d)) 
        { 
         System.out.println("Sorry.Already entered.\n"); 
        } 
       } 
      } 
     } 

     XValues.add(xval); 
     YValues.add(yval); 
    } 
} 
+0

什么是错误你有? – MeshBoy 2015-03-25 04:18:19

+0

那么,首先,该程序不会打印味精,直到我输入了大约3个坐标对。其次,它多次打印味精。 – 12dec1990 2015-03-25 04:25:11

+0

如果用户输入一个重复坐标,是否要求他们换一对,直到他们输入一个尚未输入的坐标?即使它们是重复的,你想存储坐标吗? – mstbaum 2015-03-27 16:16:47

回答

1

请注意您嵌套的for循环?您检查以前输入值的部分运行的次数比您希望运行的次数多。

例如,当i = 3时,用户输入他们的第4个条目,并且您将对照前面的3个条目进行检查。您的for(int d=0;d<YValues.size();d++)将运行三次,但由于它在for(int c=0;c<XValues.size();c++)循环内,整个循环将运行三次,总共九次。

删除行for(int c=0;c<XValues.size();c++)和相应的括号。在您的if(xval==XValues.get(c) && yval==YValues.get(d))行中,两个坐标都使用get(d)

此外,您正在检查当前是否为i>1,当您实际上想要开始检查一次i>0

修改后的代码看起来应该如下:

public static void main(String[]args) 
{ 
Scanner a=new Scanner(System.in); 

//Arraylist stores all entered x values. 
ArrayList<Integer> XValues=new ArrayList<Integer>(); 
//Arraylist stores all entered y values. 
ArrayList<Integer> YValues=new ArrayList<Integer>(); 

for(int i=0;i<10;i++) 
{ 
    int xval; 
    int yval; 

    System.out.println("Try no. #"+(i+1)); 
    System.out.print("Please enter x coordinate: "); 
    xval=a.nextInt(); 
    System.out.print("Please enter y coordinate: "); 
    yval=a.nextInt(); 

    if(i>0) 
    { 

     for(int d=0;d<YValues.size();d++) 
     { 
      if(xval==XValues.get(d) && yval==YValues.get(d)) 
      { 
       System.out.println("Sorry.Already entered.\n"); 
       break; 
      } 
     } 

    } 

    XValues.add(xval); 
    YValues.add(yval); 
} 

}

+0

我试过这样做。它不起作用:/ – 12dec1990 2015-03-25 14:58:59

+0

看到我上面的编辑,添加了几件事情。 – 2015-03-25 15:15:29

+0

我跑了你编辑的代码。问题仍然出现。我输入1,1 4次。该程序打印第二次(它应该)味精,但在第3和第4时间,味精打印超过一次。那就是问题所在。其余的都很好。 – 12dec1990 2015-03-27 15:23:47