以下程序应执行10次,每次询问用户一对坐标。我将x和y坐标存储在两个单独的arraylists中。 程序应该能够检查是否多次输入了一对坐标。如果发生这种情况,应该打印一条消息。 我的节目表现得很奇特。在其他方面,它似乎多次打印出来。
其次,如果用户输入一对坐标,我希望程序打印出一个msg,说错了对。我尝试在if之后插入一个else语句,但是没有'简而言之,每次输入一对时,程序都应该说“错误的配对”,但是如果输入了一个副本,它应该只是说“已经输入了”#。如何我这样做?
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 :(得分:1)
注意你的嵌套for
循环?检查以前条目的值的部分运行的次数比您希望的运行次数多。
例如,当i = 3时,用户输入他们的第4个条目,您将要对照前3个条目进行检查。你的for(int d=0;d<YValues.size();d++)
会运行三次,但由于它位于for(int c=0;c<XValues.size();c++)
循环内,整个循环将运行3次,总共运行9次。
删除行for(int c=0;c<XValues.size();c++)
和相应的括号。在if(xval==XValues.get(c) && yval==YValues.get(d))
行中,对{2}坐标使用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);
}
}