[英]Java - Find High and Low Number in an Array
我试图在数组中找到高低数,但我不确定为什么我的代码不能正常工作。 它给了我 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);
}
}
你需要从足够low
开始; 目前,您从零开始 - 太低而无法“捕获”数组的最低元素。
有两种方法可以解决这个问题:
Integer.MAX_VALUE
和Integer.MIN_VALUE
启动high
和low
,或high
和low
,然后从第二个元素开始处理数组。int low = Integer.MAX_VALUE;
int high = Integer.MIN_VALUE;
PS 你会发现打印出奇怪的数字,因为你使用了字符而不是整数:
int[] numbs = { 2, 4, 2, 8, 4, 2, 5};
另外..它可能正在打印ASCII表示...使用实际整数(我不确定您是否有意使用字符)。
您应该将low
和high
都设置为数组第一个位置的值。
int low = numbs[0];
int high = numbs[0];
如果第一个位置确实是最低值,它将永远不会被交换,否则它将与较低的数字交换,最高数字也会发生同样的情况。
你需要一个整数数组,你应该像这样声明:
int[] numbs = {2, 4, 2, 8, 4, 2, 5};
您得到56
作为最高值,因为根据 ASCII 表,字符 '8' 的十进制表示是56
。
您在数组 init 块中使用char
s 而不是int
s,这会立即转换为int
s 以适应int[]
数组,但不要使用其实际值,而是使用unicode值,其中: 2 = 52 和8 = 56。
'8'
是char
文字,而不是int
。 Java 语言规范定义char
如下:
整数类型是 byte、short、int 和 long [...] 和 char,它们的值是表示 UTF-16 代码单元的 16 位无符号整数。
如果在需要int
地方使用char
,则该char
将隐式转换为int
。 由于char
是数字类型,这将保留其数值,即其 UTF-16代码点。 的UTF-16代码点8
是56。
将 char 视为数字类型可能很有用。 例如,我们可以通过以下方式计算字母表的第 n 个字母
char nthLetter = (char) `A` + n;
或通过查找数字的数值
if ('0' <= digit && digit <= '9')
return value = digit - '0';
else
throw new IllegalArgumentException(digit);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.