关于以下代码片段:
public static void main(String[] args) {
int temp;
for (int i = 0; i < arr.length; i++) {
for (int k = i + 1; k < arr.length; k++) {
if (arr[i].getID() == arr[k].getID()) {
temp = temp + arr[i].getDuration() + arr[k].getDuration();
} else {
}
}
if (temp!=0) {
System.out.println(temp);
}
else {
System.out.println(arr[i].getID());
}
temp=0;
}
}
其中arr由整数ID和另一个Integer Duration构成。 我的目标是迭代循环以获取所有可能的排列。 如果ID相同,则将一个持续时间加到另一个。 temp允许我对比较ID相等时的持续时间求和;尽管在内循环的第一次运行(运行良好)之后,即使满足执行求和的条件,temp仍将其值保持为0。
这是数组arr的一些硬代码:
songs[] arr = new songs[4]; // array of object, seemed irrelevant for the problem at hand
arr[0] = new songs(111,55);
arr[1] = new songs(111, 58);
arr[2] = new songs (222, 44);
arr[3] = new songs (222, 88);
似乎在运行时,第一次将变量temp初始化为= 0时,其值不再更改。上面的arr [2]和arr [3]具有相同的ID,但是当temp从不打印时;相反,arr [i] .getID上的ID是。
我认为问题是由于变量temp的范围引起的。如果有人可以将我推向正确的方向,那将对我有很大帮助!
另一个问题:现在,我的解决方案针对每个arr数组进行打印。理想情况下,我希望每个ID打印一行;我的方法能够满足此规范吗?
非常感谢!
答案 0 :(得分:0)
在示例中您没有声明temp。在某个位置必须有一个“ int temp”,并且必须在您发布的整个代码块之前,以便按照您希望的方式工作。
另外,您的测试/打印内容应该在最后一个大括号之后,否则您将在i的每次迭代中对其进行检查
song.getID()应该为此返回一个int,而不是Integer(您说的不是有效类型的整数)。如果它是整数,则将==更改为.equals()。
这些问题中的任何一个都可能导致您看到的结果(温度为0)
如果您发布了完整的工作代码示例,将更容易确定问题出在何处
答案 1 :(得分:-1)
您正在for循环内声明temp变量。 Java中有不同的作用域。全局,方法和块/循环。当前,您正在使用无法在循环外使用的循环变量,因此,您应该将其预先声明为方法变量,这样便可以在for循环外使用它。
基本上,在for循环内的温度与外部循环的温度不同,并且两者都具有不同的值。因此结果为0。
关于第二个问题,我认为一种解决方案是使用println()在for循环中打印每个arr [i] .getID。试一试,请告诉我是否可行。