JAVA练习-维护有序的图书列表

熊先生 JAVA 892 次浏览 JAVA练习-维护有序的图书列表已关闭评论

需求说明

图书馆购买了一批图书, 为了方便管理,将图书按照书名从’A’到’Z’的顺序排列。现有一本新书,请插入到合适的位置,仍保持顺序排列,请编程解决。

所需知识:
字符串的compareToIgnoreCase()方法。
语法格式:String1.compateToIgnoreCase(String2);
方法功能:这个方法是按字典顺序比较两个字符串的,并且忽略了大小写,如果按照字典顺序String1大于String2,该方法返回一个正数。String1小于String2,该方法返回一个负数。若两个字符串相等则返回0。
解答法一:

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

———————-*/

 

Go