Java 如何检查int是否有值

Java 如何检查int是否有值,java,Java,我有以下代码,用于获取数组中的最高值和最低值,然后以七行为一行打印所有值: int hochstes; int niedrig; int q = 0; for(int i = 1; i <= 49; i++){ if(hochstes == null){ hochstes = array[i]; niedrig = hochstes; }

我有以下代码,用于获取数组中的最高值和最低值,然后以七行为一行打印所有值:

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] + "  ");
           }

        }
<代码>内部hochstes; 尼德里格; int q=0; 对于(int i=1;i hochstes){ hochstes=阵列[i]; } if(数组[i]
在第4行,我试图检查hochstes是否有值,如果没有,我将数组的第一个(“第二个”)值分配给它!当然,将
hochstes
null
进行比较是行不通的,我应该用什么来代替呢?谢谢

值类型在Java中不能为
null

您必须有一个单独的
boolean
变量,初始化为
false
。将值指定给
hochstes
时,还应将布尔值设置为
true
。然后检查布尔值,查看该值是否已初始化

为此,您还可以分别将max/min变量初始化为最小/最大可能值:

int hochstes = int.MIN_VALUE;
int niedrig = int.MAX_VALUE;

然后您可以完全跳过条件。

由于基本类型不能为
null
,因此您必须从另一个角度来看待它

最简单的解决方案是简单地将循环外的第一个可能值分配给它,然后从第二个值继续循环

例如:

正如Peter Lawrey正确指出的那样:您正从索引1开始迭代。记住,索引1与第一个索引不同。许多(如果不是全部的话)数据结构是基于零的,这意味着它们从
0
开始,而不是
1
。这就是为什么您看到我分配
数组[0]
来获取第一个值。

使用包装器类


您仍然可以使用hochstes执行正常操作,如正常int(比较/设置值等)

您可以使用sentinel值。对于最大值,使用Integer.MIN\u值;对于最小值,使用Integer.MAX\u值

int hochstes = Integer.MIN_VALUE;
int niedrig = Integer.MAX_VALUE;

for(int i : array) {
    if(hochstes < i) hochstes = i;
    if(niedrig > i)  niedrig = i;
}
int hochstes=Integer.MIN_值;
int niedrig=整数的最大值;
for(int i:array){
如果(hochstesi)niedrig=i;
}

使用整数要昂贵得多,可能会为数组的每个元素创建一个对象。

您应该始终初始化变量。解决此问题的一种方法是使用数组中的第一个元素作为max/min元素:

int hochstes = array[0];
int niedrig = array[0];
另一种方法是使用变量可用的最小(或最大)值对其进行初始化:

int hochstes = Integer.MIN_VALUE;
int niedrig = Integer.MAX_VALUE;

一个
int
总是有一个值,并且永远不会
null
。我说了什么当然,将hochstes与null进行比较是行不通的,我应该用什么来代替呢?谢谢`在您的情况下,使用数组中的第一个元素初始化
hochstes
&
niedrig
。如果存在第一个值或数组不是空的,则此操作有效。是的,这里的隐式假设是至少存在一个值。应在实际实现中添加对此的检查,以避免出现问题。OP似乎假定第一个元素也是
[1]
!?很好,我添加了一个小注释来正确反映这一点我没有值。它不是0,也不能对其进行操作。int只有在为instance@LoganMurphy谢谢,请相应编辑;我在想另一种语言。
int hochstes = array[0];
int niedrig = array[0];
int hochstes = Integer.MIN_VALUE;
int niedrig = Integer.MAX_VALUE;