public static void main(String[] args) {
Integer[] courses1 = {1,2,3};
Integer[] courses2 = {0,1};
Integer[] longestArr;
Integer[] shortestArr;
ArrayList commonCourses = new ArrayList();
if ( courses1.length > courses2.length)
{
longestArr = courses1; shortestArr = courses2;
}
else
{
longestArr = courses2; shortestArr = courses1;
}
for ( int i : longestArr)
{
for ( int j : shortestArr)
{
if (i == j);
commonCourses.add(i);
}
}
Collections.sort(commonCourses);
System.out.println(commonCourses.size());
}
无论course1和courses2的值是什么,arrayList commonCourses的大小都是两个数组中元素总数的一个,当它应该只包含两个数组中的元素时。
我有2个问题为什么要将2个数组中的元素添加到arrayList中,为什么arrayList的大小总是比元素总数多一个?
如果您想知道为什么我在开始时声明了course1和courses2,那么我在pantclipse上测试时遇到的问题就是来自talentBuddy.co的问题。我已经测试了不同的起始条件,同样的事情总是发生。
我新的精简解决方案
public static void main(String[] args) {
Integer[] courses1 = {1};
Integer[] courses2 = {0};
ArrayList <Integer>commonCourses = new ArrayList<Integer>();
for ( int i : courses1)
{
for ( int j : courses2)
{
if (i == j)
commonCourses.add(i);
}
}
Collections.sort(commonCourses);
System.out.println(commonCourses.size());
}
答案 0 :(得分:3)
您的问题是此行中的分号:
if (i == j);
if子句在此结束,并且始终执行以下行。
答案 1 :(得分:2)
if条件结束时的分号是你的问题。有关为何发生这种情况的详细说明,请参阅this StackOverflow post.简而言之,分号会导致编译器在运行时忽略条件。
for ( int j : shortestArr)
{
if (i == j);
// ^ Remove this semi-colon
commonCourses.add(i);
}
使用花括号来格式化if语句有助于防止这种情况发生:
if(condition){
doSomething();
}
答案 2 :(得分:1)
for ( int j : shortestArr)
{
if (i == j);
// ^ REMOVE THIS SEMICOLON
commonCourses.add(i);
}
问题是额外的分号。您的代码块现在在功能上与此相同:
for ( int j : shortestArr)
{
if (i == j)
{
}
commonCourses.add(i);
}