Java a,c,u,b,e,p,f,z按升序排列,插入字符后依旧是升序排列

题目是升序排列后插入一个字母是要键盘输入的publicstaticvoidmain(String[]args){//a,c,u,b,e,p,f,z按升序排列,插入字符后依... 题目是升序排列后插入一个字母是要键盘输入的
public static void main(String[] args) {
// a,c,u,b,e,p,f,z按升序排列,插入字符后依旧是升序排列
String[] name = new String[] { "a", "c", "u", "b", "e", "p", "f", "z" };// 字母数组
System.out.print("原字符序列:");
for (int i = 0; i < name.length; i++) {
System.out.print(name[i] + "\t");// 原字符排序
}
Arrays.sort(name);//升序排列
System.out.print("\n升序排序后:");
for (int i = 0; i < name.length; i++) {
System.out.print(name[i] + "\t");// 升序排列
}
int index = name.length;// 保存新增字母插入
System.out.print("\n待插入的字母是:");
Scanner scanner = new Scanner(System.in);

// 元素后移
for (int j = name.length - 1; j > index; j--) {// j表示元素
name[j] = name[j - 1];// 后移一个位置
}
name[index] = "m";// 插入数据
System.out.println("插入字符的下标是:" + index);
System.out.println("插入后的字符序列是:");
for (int k = 0; k < name.length; k++) {// 新的排序
System.out.print("name[k]" + "\t");
}

}
请问哪错了,接下来该怎么做
展开
 我来答
淼淼想某人
推荐于2018-03-13 · 超过62用户采纳过TA的回答
知道小有建树答主
回答量:91
采纳率:100%
帮助的人:105万
展开全部
String[] name = new String[] { "a", "c", "u", "b", "e", "p", "f", "z" };// 字母数组

你原先自己已经定义了数组长度
name[index] = "m";// 插入数据这里

你插入的话肯定会超出自己原先定义的长度
办法:再定义一个数组,把计算好总数组长度丢进去
int a[]=new int[n]; n代表总数组长度
然后把一个个赋值进去
更多追问追答
追问
怎么丢进去
追答
计算好的总算组长度,先当n
String aa[]=new String[n]
int num=0;
for(int i=0;i<n;i++){
if(i!=index){ //index是你之前算出来要插的位置
aa[i]=m
}else{
aa[i]=name[num]

num++
}
}
修齐6E
2018-03-13 · 超过11用户采纳过TA的回答
知道答主
回答量:51
采纳率:100%
帮助的人:19.1万
展开全部
第一步先比较写入的值该放在哪;
第二步数组扩容;
第三步从写入的值开始后移;
最后将写入的值赋给空出的位置
public static void main(String[] args) {
// a,c,u,b,e,p,f,z按升序排列,插入字符后依旧是升序排列
String[] name = new String[] { "a", "c", "u", "b", "e", "p", "f", "z" };// 字母数组
Arrays.sort(name);// 升序排列
System.out.print("\n升序排序后:"+Arrays.toString(name));
System.out.println("请输入一个字符!");
Scanner scan = new Scanner(System.in);
//输入字符
String str = scan.nextLine();
int c = str.charAt(0);
int index=0;
for(int i=0;i<name.length;i++){
//因为数组里面是String类型,所以用charAt(0)来获取
if(c<=name[i].charAt(0)){
//这边获得index位置就是需要放入的位置
index=i;
break;
}
}
//扩容数组
name = Arrays.copyOf(name, name.length+1);
//从index位置开始往后退一位,从最后一个开始依次往后
for(int i=name.length-1;i>index;i--){
name[i]=name[i-1];
}
//将写入的值填入空位
name[index] = str;
System.out.println(Arrays.toString(name));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
郭某人来此
推荐于2016-01-28 · TA获得超过1645个赞
知道答主
回答量:952
采纳率:100%
帮助的人:87.8万
展开全部
String[] name = new String[] { "a", "c", "u", "b", "e", "p", "f", "z" };// 字母数组

你原先自己已经定义了数组长度
name[index] = "m";// 插入数据这里

你插入的话肯定会超出自己原先定义的长度
办法:再定义一个数组,把计算好总数组长度丢进去
int a[]=new int[n]; n代表总数组长度
然后把一个个赋值进去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
8642766946
推荐于2017-12-16 · TA获得超过111个赞
知道答主
回答量:96
采纳率:0%
帮助的人:38.2万
展开全部
String strInput = scanner.nextLine();
加上这个接收输入的语句就行了
追问
加了运行之后还是不行,显示
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at com.wlw.Book4.main(Book4.java:28)
追答
System.out.print("\n待插入的字母是:");
Scanner scanner = new Scanner(System.in);
//新增这一句

String strInput = scanner.nextLine();
//然后放到数组中去
......
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三烈加血斧
2018-03-12 · 超过27用户采纳过TA的回答
知道答主
回答量:147
采纳率:77%
帮助的人:15.3万
展开全部
因为index=8,而数组是0-7,所以产生了下标越界异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式