3

我正在尝试查找数组中的高数和低数,但我不确定为什么我的代码无法正常工作。它给了我 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);           

    }
}
4

5 回答 5

7

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

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

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

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

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

int[] numbs = { 2, 4, 2, 8, 4, 2, 5};
于 2012-11-25T02:01:49.527 回答
2

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

于 2012-11-25T02:04:04.603 回答
0

'8'char字面意思,而不是int. Java 语言规范定义 char如下:

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

如果您在预期的char地方使用 a,则将隐式转换为。由于是数字类型,这将保留其数值,即其 UTF-16代码点。的 utf-16 码位是 56。intcharintchar8

将 char 视为数字类型可能很有用。例如,我们可以通过以下方式计算字母表中的第 n 个字母

char nthLetter = (char) `A` + n;

或通过以下方式查找数字的数值

if ('0' <= digit && digit <= '9')
    return value = digit - '0';
else
    throw new IllegalArgumentException(digit);
于 2012-11-25T02:14:41.143 回答
0

您在数组初始化块中使用chars 而不是ints,这会立即转换为ints 以适合int[]数组,但不要使用其实际值,而是使用unicode值,其中:2 = 52 和 8 = 56。

于 2012-11-25T02:09:12.590 回答
0

您应该将low和设置high为数组第一个位置的值。

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

如果第一个位置确实是最低值,它将永远不会被交换,否则它将与较低的数字交换,最高的数字也会发生同样的情况。

你想要一个整数数组,你应该像这样声明:

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

您将获得56最高值,因为根据 ASCII 表,char '8' 的十进制表示是56.

于 2012-11-25T02:04:24.330 回答