Lforlik 2021-06-06 13:18 采纳率: 100%
浏览 59
已采纳

希尔排序中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);
		
		
	}

}

 

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-06-06 13:19
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?