冷冰凋凌 2020-09-05 18:32 采纳率: 0%
浏览 100
已采纳

Java编程,eclipse中运行数组赋值后反转出错,不理解,求解答

图片说明
public class Test {

public static void main(String[] args) {
    // TODO 自动生成的方法存根

    //练习-数组最小值
    int[] a=new int[20];

    //Math.random() 会得到一个0-1之间的随机浮点数,然后乘以100,并强转为整型即可。
    System.out.println("此数组a为:");
    for(int i=0;i<20;i++){
        a[i]=(int) (Math.random()*100);
        System.out.print(a[i]+" ");
    }

    int min=a[0];       
    for(int j=1;j<20;j++){
        if(a[j]<min)
            min=a[j];
    }

    System.out.println('\n'+"此数组最小值为:"+min);

    //练习-数组反转 
    //首先创建一个长度是20的数组,并填充随机数
    //使用for循环或者while循环,对这个数组实现反转效果
    int[] b=new int[20];
    b=a;

    System.out.println('\n'+"此数组b为:");
    for(int i=0;i<20;i++){          
        System.out.print(b[i]+" ");
    }

    for(int j=0;j<20;j++){
        a[j]=b[19-j];
    }

    System.out.println('\n'+"实现反转后此数组变更为:");
    for(int i=0;i<20;i++){          
        System.out.print(a[i]+" ");
    }       

}

}

  • 写回答

1条回答 默认 最新

  • returnadsss 2020-09-05 22:22
    关注

    嗨,简单啊大兄弟,python及Java与C不同,数组是作为引用存在的,b=a;之后,a和b是同一个引用,指向同一个数组,a[j]=b[19-j]这句话和a[j]=a[19-j]等价,
    前十个数按后面的十个数倒过来赋值完后,后面十个数值是前面十个数再倒过来,所以前一半的数字都丢失了。这么改程序即可:
    package javaweb;

    public class Test {
    public static void main(String[] args) {
    // TODO 自动生成的方法存根

        //练习-数组最小值
        int[] a=new int[20];
    
        //Math.random() 会得到一个0-1之间的随机浮点数,然后乘以100,并强转为整型即可。
        System.out.println("此数组a为:");
        for(int i=0;i<20;i++){
            a[i]=(int) (Math.random()*100);
            System.out.print(a[i]+" ");
        }
    
        int min=a[0];       
        for(int j=1;j<20;j++){
            if(a[j]<min)
                min=a[j];
        }
    
        System.out.println('\n'+"此数组最小值为:"+min);
    
        //练习-数组反转 
        //首先创建一个长度是20的数组,并填充随机数
        //使用for循环或者while循环,对这个数组实现反转效果
        int[] b=new int[20];
    
        System.out.println('\n'+"此数组b为:");
        for(int i=0;i<20;i++){ 
            b[i]=a[i];
            System.out.print(b[i]+" ");
        }
    
        for(int j=0;j<20;j++){
            a[j]=b[19-j];
        }
    
        System.out.println('\n'+"实现反转后此数组变更为:");
        for(int i=0;i<20;i++){          
            System.out.print(a[i]+" ");
        }       
    
    }
    

    }
    因为数组元素类型是int,是基本型,所以会复制值而不是引用,这样就可以了,试试老弟。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#vscode#的问题:ESP32开发板对接MQTT实现小灯泡的开关
  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏