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

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);           

    }
}

提示:如果您首先对数组进行排序,最高和最低的数字将位于非常特定的位置。 - Alan
是的,绝对不如效率高,但是由于n的数量很小,差异可以忽略不计,并且还带来了更易于阅读和维护代码的好处。 - Alan
5个回答

7
你需要将low的起点设置得足够低;目前,它的起点是零——太低了,无法“捕获”数组中最小的元素。
解决这个问题有两种方法:
  • 使用Integer.MAX_VALUEInteger.MIN_VALUE来设置highlow的起点,或者
  • 使用数组的第一个元素作为highlow的起点,然后从第二个元素开始处理数组。

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

注意:如果你使用了字符而非整数,你会看到打印出来的奇怪数字:


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

2
此外...它可能是打印ASCII表示形式...使用实际的整数(我不确定你使用字符是否有意)。

0

你应该将 lowhigh 都设置为数组的第一个位置的值。

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

如果第一个位置确实是最小值,它将永远不会被交换,否则它将与较低的数字交换,最大数字也是如此。
您需要一个整数数组,应该像这样声明:
```java int[] array = new int[size]; ```
int[] numbs = {2, 4, 2, 8, 4, 2, 5};

你之所以得到最高值为56,是因为根据ASCII表,字符'8'的十进制表示为56。

0

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

整数类型包括 byte、short、int 和 long [...] 以及 char,其值为表示 UTF-16 代码单元的 16 位无符号整数。

如果您在需要 int 的地方使用 char,则会将 char 隐式转换为 int。由于 char 是数字类型,因此这将保留其数字值,即其 UTF-16 代码点。字符 '8' 的 utf-16 代码点为 56。

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

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

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

if ('0' <= digit && digit <= '9')
    return value = digit - '0';
else
    throw new IllegalArgumentException(digit);

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接