我正在尝试查找数组中的高位和低位数,但我不确定为什么我的代码无法正常工作。它给了我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);
}
}
答案 0 :(得分:7)
你需要开始low
足够低;目前,你从零开始 - 太低而无法“捕获”数组的最低元素。
有两种方法可以解决这个问题:
Integer.MAX_VALUE
和Integer.MIN_VALUE
开始high
和low
,或high
和low
,然后从第二个元素开始处理数组。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 point。 char
的utf-16代码点为56。
将char作为数字类型处理可能很有用。例如,我们可以通过
计算字母表的第n个字母8
或通过
查找数字的数值char nthLetter = (char) `A` + n;