关于代码与数学公式区别的问题
前一阵子做一个算法题,题目是比较简单的,大概是把一个数组从中间位置断开将后半部分与前半部分对调,然后查找指定值的索引,也就没想那么多,然后快速写完提交,结果运行结果错误。。。
仔细查找了半天,就是找不到问题,被迫之下只能debug,然后让我十分惊奇的一幕发生了,for循环被跳了,上代码。
main()
int target=9;
int nums[]={7,8,9,1,2,3};
TargetIndex targetIndex=new TargetIndex();
System.out.println(targetIndex.binary(nums,target));
binary()
public int binary(int[] nums,int target){
if(target>=nums[0]){
for(int i=0;i<(1/2)*nums.length;i++)
{
if(nums[i]==target) return i;
}
}else{
//~~~~~~~~~~
//return
}
return -1;
}
运行的结果感觉应该是什么?
2?有没有同胞跟我开始想的一样
正确答案应该是-1
应该怎么改结果才能是2
public int binary(int[] nums,int target){
if(target>=nums[0]){
for(int i=0;i<nums.length/2;i++)
{
if(nums[i]==target) return i;
}
}else{
//~~~~~~~~~~
//return
}
return -1;
}
有什么不同吗
那是必然有,很多语言(Java,C++等)在进行运算时都是先将数值自身进行类型转化再进行计算的。
像这道题(1/2)*nums.length
,1/2被约等于0,循环直接跳
那如果强转了可以吗:(int)((double)nums.length*(double)(1/2))
依旧不可以,因为1/2以后已经为0了,强转必须在自身转化之前执行,所以乘以分数必须按照规范来nums.length*3/5