需求说明
图书馆购买了一批图书, 为了方便管理,将图书按照书名从’A’到’Z’的顺序排列。现有一本新书,请插入到合适的位置,仍保持顺序排列,请编程解决。
package sample;
import java.util.Scanner;
public class P187 {
/*
* @P185-186 示例1
*/
public static void main(String[] args) {
System.out.println(“p187 上机练习1(只定义一个数组)”);
System.out.println(“—————————–“);
String[] musics = new String[5];//数组定义
Scanner input = new Scanner(System.in);
System.out.println(“请输入数组信息:”);//输入数组数据
for(int i = 0;i<musics.length; i++){
System.out.print(“输入第” + (i+1) + “个数据:”);
musics[i] = input.nextLine();
}
System.out.println(“—————————–“);
System.out.println(“插入前的数组为:”);//输出原数组数据
for(int i = 0;i < musics.length ;i++){
System.out.print(musics[i]+”\t”);
}
System.out.print(“\n”);
System.out.println(“—————————–“);
String music = “”;//定义插入元素的类型
System.out.println(“请输入需要插入数组的信息:”);//插入的元素
music = input.nextLine();
System.out.print(“\n”);
System.out.println(“—————————–“);
//在顺序表的第i个位置插入一个元素x
int index = musics.length; //数组元素个数赋值于index
for(int i =0;i<musics.length;i++){//把新加入的元素与在musics数组中的元素进行比较获取位置(按A-Z得顺序比较)
if(musics[i].compareToIgnoreCase(music)>0){
index = i;//获取的位置号数赋值给index
break;
}
}
for(int i = musics.length-1;i>index;i–){//给新元素腾位置
musics[i] = musics[i-1];
}
musics[index] = music;//把新元素加入到musics数组中的第index个位置
System.out.print(“插入后的数组为:”);//输出全新数组
for(int i = 0; i<musics.length;i++){
System.out.print(musics[i]+”\t”);
}
}
}
解答法二:
import java.util.Scanner;
public class CS{
public static void main(String[] args){
String[] books = new String[]{“Computer”, “Hibernate”, “Java”, “Struts”};
String[] newBooks = new String[books.length+1]; //新书数组
String bookName; //保存添加的新书名
int index = books.length; //保存在新数组中的下标,注意一定要初始化
System.out.println(“原书数组为:”);
for(int i=0; i<books.length; i++){
System.out.print(books[i]+” “); //输出插入前的数组
}
//将数组books的元素复制到newBooks数组中
for(int i=0; i<books.length; i++){
newBooks[i] = books[i];
}
//找到插入新书的位置
System.out.print(“\n请输入书名:”);
Scanner in = new Scanner(System.in);
bookName = in.nextLine(); //如使用in.next(),将只记录连续的字符,空格及其后面的字符忽略;
for(int i=0; i<books.length; i++){
if(bookName.compareToIgnoreCase(books[i]) < 0){ //第一个大于新书名的元素即为插入位置
index = i; //插入的位置是数组下标为i的元素
break;
}
}
//元素后移
for(int i=newBooks.length-1; i>index; i–){
//如用i++实现,将会出现元素[1]赋给元素[2],元素[2]的值变为元素[1],不能再元素[2]的原值赋给元素[3]
newBooks[i] = newBooks[i-1]; //下标为index的元素往后移1位
}
//插入新书
newBooks[index] = bookName; // 将新书名插入到该位置
System.out.println(“插入后的新书数组为:”);
for(int i=0; i<newBooks.length; i++){
System.out.print(newBooks[i]+” “);
}
}
}
/*———————-
原书数组为:
Computer Hibernate Java Struts
请输入书名:HelloWorld
插入后的新书数组为:
Computer HelloWorld Hibernate Java Struts
———————-*/