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   Rxr 2017.09.08 10:37

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

qq_33727653
qq_33727653   Rxr 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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在一个int数组里查找出所有这样的数,它大于等于左侧所有数,小于等于右侧所有数。
这题很直观的一个算法是,挨个的查找各个元素是否满足条件,算法的复杂度是O(n^2),太过复杂。 但如果我们在从左到右扫描数组的时候,能够维护一个candidate的数组, 该数组的元素满足: 到目前为止,这些元素都大于等于它前面的元素,而小于等于到目前为止扫描到的它右边的所有元素。 容易证明, candidate数组中的元素是按照非递减顺序排列的,即对任意的i 当我们扫描到一个小的元素的时候,
在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
问题: 一个int数组, 比如 array[],里面数据无任何限制,要求求出 所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。  分析: 这题很直观的一个算法是,挨个的查找各个元素是否满足条件,算法的复杂度是O(n^2),太过复杂。
搜狐笔试题:给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。
http://bbs.csdn.net/topics/370218935 究竟有没有好的解法
删除递增线性表中值大于min且小于max的元素
<br />#include<stdio.h>/*2009/08/29完成*/ #include<stdlib.h>/*删除递增线性表中值大于min且小于max的元素*/ #include <malloc.h> #define ERROR 0 #define OK 1 typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList;/*LinkList为
面试题:检查一个数组里是否存在m个数的和等于某个值
检查一个数组里是否存在m个数的和等于某个值 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索“cqs_2012”即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008; 制图工具:office 2010 p
每日一练——从长度为n的数组里选出m个数使和为固定值sum
这个问题是我从leetcode上一道问题所想到的,原题:如果是从数组中选出2个数相加使之成为固定的数sum,这当然很简单,把数组中的数字遍历一遍,判断另一个数字是否也在数组中即可。代码如下。 vector twoSum(vector& nums, int target) { vector result; map cache;//第一个为数字,第二个为下标
01背包问题变种:从长度为n的数组里选出m个数使和为固定值sum
这个问题是我从leetcode上一道问题所想到的,原题:如果是从数组中选出2个数相加使之成为固定的数sum,这当然很简单,把数组中的数字遍历一遍,判断另一个数字是否也在数组中即可。代码如下。vector&amp;lt;int&amp;gt; twoSum(vector&amp;lt;int&amp;gt;&amp;amp; nums, int target) { vector&amp;lt;int&amp;gt; result; ...
js往数组中添加值用push()函数
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
def bisearch(l, e, lo, hi): while lo < hi: mi = (lo + hi)//2 if e > l[mi]: lo = mi + 1 else: hi = mi return hi注: (1)不同于寻找等于某值的情况(且找到即可,不要求第一个),体现在代码中,就是判断逻辑;
为什么导入EXCEL数据到SQL数据库中,数据表总是有和记录个数一样多的空记录?望高手们指教
<br />Public Sub in_from_excel(ByVal database_name As String, ByVal table_name As String, ByVal field_list_name As   String, ByVal excel_file As String)<br /><br />        connectionstring = "data source=" & hostname & "/数据库名" & ";Initial Catalog=" & datab