黑马程序员技术交流社区
标题:
练习数组的时候遇到的小问题[已解决]
[打印本页]
作者:
王永旺
时间:
2012-4-4 09:41
标题:
练习数组的时候遇到的小问题[已解决]
本帖最后由 王永旺 于 2012-4-4 10:48 编辑
下面今天练习数组的折半查找的时候编的程序,我想问我在查找数的时候,这个数字填07就可以通过,填08就会编译错误。显示“过大的整数”我如果就是想通过输入08,该如何实现呢。
/**
@author 旺旺
需求: 1 遍历数组
2折半查找 while实现
*/
public class ArrayDemo
{
public static void main(String[] args)
{
int[] arr = {1,2,4,6,8,34,67,98,123,454};
int index = getIndex(arr ,-1);
int index1= halfSearch(arr ,08);//为什么这个数字填07就可以通过,填08就会编译错误。
System.out.println("index="+index);
System.out.println("index1="+index1);
}
public static int getIndex(int[] arr,int key)
{
for(int i=0;i<arr.length-1;i++)
{
if(arr
==key)
{
return i;
}
}
return -1;
}
public static int halfSearch(int[] arr,int key)
{
int min=0,max=arr.length,mid;
while(min<=max)
{
mid=(min+max)/2;
if(arr[mid]<key)
{
min=mid+1;
}
else if(arr[mid]>key)
{
max=mid-1;
}
else
return mid;
}
return -1;
}
}
作者:
李敏
时间:
2012-4-4 09:52
本帖最后由 李敏 于 2012-4-4 11:29 编辑
public static void main(String[] args)
{
int[] arr = {1,2,4,6,8,34,67,98,123,454};
int index = getIndex(arr ,-1);
int index1= halfSearch(arr ,08);//为什么这个数字填07就可以通过,填08就会编译错误。-------------
以0 开头的是八进制。
System.out.println("index="+index);
System.out.println("index1="+index1);
}
public static int getIndex(int[] arr,int key)
{
for(int i=0;i<arr.length-1;i++)
{
if(arr==key)//---------------------
if(arr [ i ] ==key)
刚才弄成 i 了。
{
return i;
}
}
return -1;
}
作者:
李敏
时间:
2012-4-4 09:55
八进制的8 是010,你突然出现个08,当然过大。
作者:
盛光富
时间:
2012-4-4 10:04
public static int getIndex(int[] arr,int key)
{
for(int i=0;i<arr.length-1;i++)
{
if(arr==key)
{
return i;
}
}
return -1;
}
这里应该也是编译不过的吧, if(arr==key)应该是写成 if(arr[i]==key)这样
作者:
郑苑东
时间:
2012-4-4 10:12
十进制: 直接写阿拉伯数字。。。。。。。。。八进制: 以0开头。。。。。。。。。。。十六进制: 以0x开头。。。。。。。08.。是八进制数。。最大只能到七。。。逢八进一。。
作者:
盛光富
时间:
2012-4-4 10:14
08不属于int类型数值,所以会说该类型超出范围 08是字符串 要用string 数组,
int 是整数型 ,如果你想最好把0去了
作者:
彭威
时间:
2012-4-4 10:42
你下面引用的折半查找功能函数中key可以使任意进制的任意数,而你输入了07证明次数是8进制中的7,系统转换为10进制后在你的数组中找不到这个数从而返回-1;但你输入的08,8进制是不存在的,8进制每位最高位为7.
另,你有一行打错了;见线面//
public class ArrayDemo
{
public static void main(String[] args)
{
int[] arr = {1,2,4,6,8,34,67,98,123,454};
int index = getIndex(arr ,-1);
int index1= halfSearch(arr ,07);//为什么这个数字填07就可以通过,填08就会编译错误。
System.out.println("index="+index);
System.out.println("index1="+index1);
}
public static int getIndex(int[] arr,int key)
{
for(int i=0;i<arr.length-1;i++)
{
if(arr
==key) //
arr
==key 这是查找key是否与arr中的元素相同
{
return i;
}
}
return -1;
}
public static int halfSearch(int[] arr,int key)
{
int min=0,max=arr.length,mid;
while(min<=max)
{
mid=(min+max)/2;
if(arr[mid]<key)
{
min=mid+1;
}
else if(arr[mid]>key)
{
max=mid-1;
}
else
return mid;
}
return -1;
}
}
这样把08改为34或者其他的就会得到相应的角标;希望对你有帮助
作者:
黑马老兵
时间:
2012-4-4 10:45
08以0开头说明是八进制,在八进制中最大的基本数是7跟十进制中最大的数是9一样。所以你写成08是不正确的,正常的是010.还有你程序中 if(arr==key) 这句是错误的 。arr是存储的是一个指向数组物理存储位置的值。key是一个int类型 的所以不能进行比较,而且比较也没什么意义。
作者:
王永旺
时间:
2012-4-4 10:49
谢谢大家,把八进制这茬给忘了。知道了
作者:
邓斌
时间:
2012-4-4 10:50
简单来说 08不属于int型。08本来就是个错误。0开头为八进制,八进制逢8进1。书写08,09,本来就是个错误。如果要这样书写只能作为字符串。String。
可以简单测试下
int s1=07;
int s2=08; //String s2="08";
s.o.p(s1+"+"+s2);
编译还是过大的整数。//隐去s2 后编译通过 如果硬要输出的话,只能放入String 类型变量中.
另外楼主代码中 if(arr==key)
arr 是数组 ==key 一个int 数 显然和08,09输入一样。是个错误。。 数组和数字式没可比性的。
需改: if(arr[i]==key)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2