在while循环中改变条件的顺序会使程序崩溃

 危亚丽 发布于 2023-02-13 20:11

在while循环中改变条件的顺序会使程序崩溃.如果我这样写:while(a[in-1]>=temp && in>0),该程序不会工作.为什么?错误是:ArrayIndexOutOfBoundsException:-1.以下代码有效,直到我进行上述更改.

 public class ISort {
public int[] sort(int[] a){
    int n=a.length;
    for(int out=1;out0 && a[in-1]>=temp ){
           a[in]=a[in-1];
           in--;
        }
        a[in]=temp;
    }
    return a;
}
public static void main(String[] args){
    int[] a={3,2,1,6,3,8,8,10,9};
    ISort s=new ISort();
    int[] res=s.sort(a);
    for(int i=0;i

Maroun.. 5

由于短路评估.

如果你写while(in>0 && a[in-1]>=temp),那么,如果in <= 0,你不评估第二部分.

为什么?

因为false &&任何内容的结果总是错误的,所以如果第一面已被评估为false,则检查另一方是多余的.

我认为你AarrayIndexOutOfBoundsException改变订单时得到了因为in<= 0,你仍然试图a在负面索引中访问.这就是为什么当你想通过某个对象访问一个方法并且你不确定该对象是否为null时,你有时会这样做:

if(myVar != null && myVar.myMethod())

1 个回答
  • 由于短路评估.

    如果你写while(in>0 && a[in-1]>=temp),那么,如果in <= 0,你不评估第二部分.

    为什么?

    因为false &&任何内容的结果总是错误的,所以如果第一面已被评估为false,则检查另一方是多余的.

    我认为你AarrayIndexOutOfBoundsException改变订单时得到了因为in<= 0,你仍然试图a在负面索引中访问.这就是为什么当你想通过某个对象访问一个方法并且你不确定该对象是否为null时,你有时会这样做:

    if(myVar != null && myVar.myMethod())

    2023-02-13 20:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有