我有这段代码,要获取数组中的最高和最低值,然后打印出七行中的所有值:
int hochstes;
int niedrig;
int q = 0;
for(int i = 1; i <= 49; i++){
if(hochstes == null){
hochstes = array[i];
niedrig = hochstes;
}
if(array[i] > hochstes){
hochstes = array[i];
}
if(array[i] < niedrig){
niedrig = array[i];
}
q++;
if(q == 7){
q = 0;
System.out.println("");
}else{
String a = (i < 10) ? " " + i : "" + i;
System.out.print(a + ": " + array[i] + " ");
}
}
在第4行,我试图检查hochstes
是否有值,如果没有,我将数组的第一个(“第二个”)值分配给它!当然不能比较hochstes
和null
我应该用什么代替谢谢!
答案 0 :(得分:6)
由于原始类型不能是null
,你必须以另一种方式看待它。
最简单的解决方案是简单地在循环外为其分配第一个可能的值,并从第二个值继续循环。
E.g:
int hochstes = array[0];
// Loop from 1 to higher
正如Peter Lawrey正确评论的那样:你在索引1处开始迭代。索引1与第一个索引不同,记住这一点。许多(如果不是全部)数据结构都是从零开始的,这意味着它们从0
开始,而不是1
。这就是为什么你看到我指定array[0]
来获得第一个值。
答案 1 :(得分:4)
您可以使用哨兵值。要获得最大值,请使用Integer.MIN_VALUE,并至少使用Integer.MAX_VALUE。
int hochstes = Integer.MIN_VALUE;
int niedrig = Integer.MAX_VALUE;
for(int i : array) {
if(hochstes < i) hochstes = i;
if(niedrig > i) niedrig = i;
}
使用Integer会更加昂贵,并且可以为数组的每个元素创建一个对象。
答案 2 :(得分:2)
使用包装类
DO
Integer hochstes = null;
你仍然可以像普通的int(比较/设置值等)那样使用hochstes进行正常操作
答案 3 :(得分:1)
您应该始终初始化变量。解决此问题的一种方法是使用数组中的第一个元素作为max / min元素:
int hochstes = array[0];
int niedrig = array[0];
其他方法是使用可用于变量的最小(或最大)值来初始化它:
int hochstes = Integer.MIN_VALUE;
int niedrig = Integer.MAX_VALUE;
答案 4 :(得分:0)
Java中的值类型不能是null
。
您必须有一个单独的boolean
变量,初始化为false
。为hochstes
指定值时,还要将布尔值设置为true
。然后检查你的布尔值以查看该值是否已经初始化。
出于此特定目的,您还可以将最大/最小变量分别初始化为最小/最大可能值:
int hochstes = int.MIN_VALUE;
int niedrig = int.MAX_VALUE;
然后,您可以完全跳过条件。