希尔排序中while循环的条件为什么不能用&,要用&&?

我的希尔排序时在while(j>-1&&data[j]>temp)这里,用&就会报数组下标越界,而用&&就能正常运行。

package work11;

import java.util.Arrays;

public class SortDemo {
	
	
	/**
	 * 希尔排序
	 * @param data
	 * @param d
	 */
	public static void shellSort(int []data){
		
		int i,j,temp;
		for(int d=data.length/2;d>0;d/=2){
		for( i=d;i<data.length;i++){
			j=i-d;
			
			temp=data[i];
			while(j>-1&&data[j]>temp){
				data[j+d]=data[j];
				j-=d;
			}
			data[j+d]=temp;  			
		
		}
		System.out.println(Arrays.toString(data));
		}
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		int [] data3 = {503,17,512,908,170,897,275,653,426,154,509,612,677,765,703,94};
		System.out.println("希尔排序每一趟的结果为:");
		shellSort(data3);
		
		
	}

}

 

 

你要理解&和&&的用法。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632