Java-查找数组中的高和低数字
我试图找到数组中的高和低数字,但我不确定为什么我的代码不能正常工作。它给了我0和56的输出。我理解为什么它会给出0,但是56是从哪里来的呢Java-查找数组中的高和低数字,java,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
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);
}
}
封装测试;
公开课考试{
公共静态void main(字符串[]args){
int[]numbs={'2','4','2','8','4','2','5'};
整数计数=0;
int低=0;
int高=0;
while(计数高){
高=麻木[计数];
}
计数++;
}
系统输出打印项次(低);
系统输出打印项次(高);
}
}
您需要将启动得足够低;目前,它的起始值为零—太低,无法“捕获”数组中最低的元素
int low = numbs[0];
int high = numbs[0];
有两种方法可以解决这个问题:
- 使用
Integer.MAX\u值
和Integer.MIN\u值
启动高
和低
,或
- 使用数组的初始元素启动
高
和低
,然后从第二个元素开始处理数组
另外,您会发现打印的数字很奇怪,因为您使用的是字符而不是整数:
int[] numbs = { 2, 4, 2, 8, 4, 2, 5};
还有。。它可能正在打印ASCII表示。。。使用实际整数(我不确定您是否有意使用字符)。您应该将低位
和高位
设置为数组第一个位置的值
int low = numbs[0];
int high = numbs[0];
如果第一个位置确实是最低的值,它将永远不会被交换,否则它将被交换一个较低的数字,同样的情况也会发生在最高的数字上
您需要一个INT数组,应该像这样声明:
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。8
的utf-16编码点为56
将char视为数字类型可能很有用。例如,我们可以通过
char nthLetter = (char) `A` + n;
或通过以下方式查找数字的数值:
if ('0' <= digit && digit <= '9')
return value = digit - '0';
else
throw new IllegalArgumentException(digit);
if('0'提示:如果您首先对数组排序,最高和最低的数字将位于非常特定的位置。是的,肯定没有那么有效,但是对于如此小的n数,差异可以忽略不计,而且代码更易于阅读和维护。