2 weixin 39902941 weixin_39902941 于 2017.09.08 10:29 提问

书上的练习,为什么不一样?一直在第一位,而且小于数组里的值时报错

package shuzu;
import java.util.Scanner;
public class ngn {

public static void main(String[] args) {

    Scanner input=new Scanner(System.in);

    int[]stu=new int[]{12,23,45,56};


    int rise = stu.length; 

    // 下面开始为新元素找位置
            System.out.println("请输入新增成绩:");
            int num = input.nextInt(); 

            for (int r = 0; r < stu.length; r++) {
                if (num > stu[r]) { 
                    rise = r;
                    break;
                }
            }

            // 下面开始元素后移
            for (int p = stu.length - 1; p > rise; p--) {
                stu[p] = stu[p - 1]; // rise下标开始的元素后移一们位置
            }
            stu[rise] = num; // 在stu中插入数据
            System.out.println("插入成绩的下标是:" + rise);
            System.out.println("插入后的成绩信息是:");

            for (int y = 0; y < stu.length; y++) {
                System.out.print(stu[y] + "\t");
            }
}

}

5个回答

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.08 10:37

int rise = stu.length; 这句话有问题啊,,初始给0比较好

qq_33727653
qq_33727653   2017.09.08 11:10
 for (int r = 0; r < stu.length; r++) {
                if (num > stu[r]) { 
                    rise = r;
                    break;
                }
            }

楼主这个语句是要表达什么意思?比如num=13 rise赋值了0,num=24 rise赋值了0,num=46 rise赋值了0,num=60 rise赋值了0.。。。。都等于0了,

比如插入了num=13,那么stu就变成了{13,12,23,45}.
在比如num=9,此时rise还是原来的4,不走循环了,直接走下面的stu[rise]即stu[4],数组越界了!!!!

所以楼主的代码分析基本就这样,应该不是楼主的想法实现!!!这是代码逻辑问题!!!

GeckoLovesKeyboard
GeckoLovesKeyboard   2017.09.08 11:43

int[]stu=new int[]{12,23,45,56};就已经固定了数组的长度啊,怎么进行插入新的元素?

qq_16768503
qq_16768503   2017.09.08 17:44

你的逻辑有问题,你已经定好了数组的长度,怎么向里面插入。你也没使用增加数组长度的方法,所以注定实现不了的

qq_36687479
qq_36687479   2017.09.08 17:48

我大概看了一下代码,发现你对数组的概念非常模糊,我简单说一下,
1、数组的长度是不可变的,(集合的长度可以改变)当你定义一个数组之后,你就不能改变他的长度了,如果你想新插入一个值,就必须删掉一个值,也就是新值替换旧值。
2、如果你想在数组中某个位置插入一个新值,那么这个位置后面的每个元素都得统一向后挪一个位置;
3、数组的下标是0开始的,你的这个数组长度为4,最大下标为3
(搞明白这三点了你再根据你的逻辑自己找找你的问题吧,你的代码逻辑有点混乱)

Csdn user default icon
上传中...
上传图片
插入图片