Java - 在数组中查找高和低数字

时间:2012-11-25 02:00:30

标签: java

我正在尝试查找数组中的高位和低位数,但我不确定为什么我的代码无法正常工作。它给了我0和56的输出。我理解为什么它给0,但56来自哪里?

package test;

public class Test {

    public static void main(String[] args) {
        int[] numbs = { '2', '4', '2', '8', '4', '2', '5'};

        int count = 0;
        int low = 0;
        int high = 0;

        while(count < numbs.length)
        {
             if(numbs[count]< low) {
                low = numbs[count];
            }

            if(numbs[count]> high) {
                high = numbs[count];
            }

            count++;   
        }

        System.out.println(low); 
        System.out.println(high);           

    }
}

5 个答案:

答案 0 :(得分:7)

你需要开始low足够低;目前,你从零开始 - 太低而无法“捕获”数组的最低元素。

有两种方法可以解决这个问题:

  • 使用Integer.MAX_VALUEInteger.MIN_VALUE开始highlow,或
  • 使用数组的初始元素启动highlow,然后从第二个元素开始处理数组。

int low = Integer.MAX_VALUE;
int high = Integer.MIN_VALUE;

P.S。您会发现打印出奇怪的数字,因为您使用的是字符而不是整数:

int[] numbs = { 2, 4, 2, 8, 4, 2, 5};

答案 1 :(得分:2)

另外..它可能是打印ASCII表示...使用实际整数(我不确定你是否故意使用字符)。

答案 2 :(得分:0)

您应该将低和高等于数组第一个位置的数字。

int low = numbs[0];
int high = numbs[0];

如果第一个位置确实是最低的数字,它将保持不变,否则它将与较低的数字交换,同样的情况发生在最高的数字。

你想要int你应该给你的数组int:

int[] numbs = {2, 4, 2, 8, 4, 2, 5};

你得到的56是最高的,因为根据ASCII表,字符'8'的相应十进制数是56。

答案 3 :(得分:0)

您在数组init块中使用char而不是int s,这会立即转换为int以适合int[]数组,但不要t使用其实际值,但使用 unicode 值,其中:2 = 52和8 = 56.

答案 4 :(得分:0)

'8'char字面值,不是int。 Java语言规范defines char如下:

  

整数类型是byte,short,int,long [...]和char,其值是16位无符号整数,表示UTF-16代码单元。

如果您使用期望char的{​​{1}},int会隐式转换为char。由于int是数字类型,因此将保留其数值,即其UTF-16 code pointchar的utf-16代码点为56。

将char作为数字类型处理可能很有用。例如,我们可以通过

计算字母表的第n个字母
8

或通过

查找数字的数值
char nthLetter = (char) `A` + n;