使用Java compareToIgnoreCase 方法排序
這個方法我在上一篇文章已經說過如何使用了,也說明了它的原理
我們可以看一看:點擊查看
https://blog.janyork.com/index.php/archives/421/
為了更加詳細的講解這個方法在陣列中的使用,我們來講解一下這個示例
示例
我們用一個String陣列來儲存4首歌曲的名字,然后從控制臺輸入一首歌,并且將它插入到陣列里面,并且排序5首歌曲
直接看代碼:
陣列歌曲排序
import java.util.Scanner;
public class HgDome {
public static void main(String[] args) {
//變數跟陣列關于初始值問題
String[] musics = new String[]{"Island","Ocean","Pretty","Sun"};
String[] newMusics = new String[musics.length+1];
//新歌曲陣列
String music;
//保存用戶輸入的歌曲名稱
int index = musics.length;
//保存新歌插入位置
//輸出插入前的結果
System.out.print("插入前的陣列為:");
for(int i = 0; i < musics.length ; i++){
System.out.print(musics[i]+" ");
}
//將陣列musics中的元素復制到新歌曲陣列newMusics中
for(int i = 0; i < musics.length; i++){
newMusics[i] = musics[i];
}
//輸入歌曲名稱
Scanner input = new Scanner(System.in);
System.out.print("\n請輸入歌曲名稱:");
music = input.nextLine();
//找到新元素的插入位置
for(int i = 0; i < musics.length; i++){
if(musics[i].compareToIgnoreCase(music) > 0){
index = i;
break;
}
}
//元素后移
for(int i = newMusics.length-1; i > index; i--){
newMusics[i] = newMusics[i-1];
//index下標開始的元素后移一個位置
}
newMusics[index] = music;
//新元素放在index的位置
//輸出插入后的結果
System.out.print("插入后的陣列為:");
for(int i = 0; i < newMusics.length; i++){
System.out.print(newMusics[i]+" ");
}
}
}
我們來看看效果
分析
先看看我們開始
我們定義了兩個陣列!
String[] musics = new String[]{"Island","Ocean","Pretty","Sun"};
這是第一個陣列,它的作用是儲存4個歌曲的名稱,這是一個靜態(不可改變)的陣列值,無法擴充它的儲存空間,所以我們需要再定義一個動態陣列空間 定義一個動態陣列:
String[] newMusics = new String[musics.length+1];
這個陣列的長度是 [musics.length+1] ,陣列名+length 是獲取陣列的長度,我們的第二個陣列里面需要多一個空間來保存插入的數值,所以需要原來的musics這個陣列的長度 +1
好了,我們已經將兩個陣列定義好了
定義變數
下一步,我們定義一個空值,來保存要插入的歌名
String music;
然后我們用定義一個int數值,來儲存要插入歌曲插入的位置(下標)
int index = musics.length;
輸出之前陣列
我們輸出一次沒插入歌曲前的陣列
System.out.print("插入前的陣列為:");
for(int i = 0; i < musics.length ; i++){
System.out.print(musics[i]+" ");
}
我們的靜態陣列是不可擴充的,我們利用回圈來將原來的陣列 musics[] 搬運到 newMusics[] ,因為原來的陣列只有4個String值,而我們新的陣列有5個空間,將陣列搬運到新陣列后我們就空余一個空間,用于放插入空間
//將陣列musics中的元素復制到新歌曲陣列newMusics中
for(int i = 0; i < musics.length; i++){
newMusics[i] = musics[i];
}
輸入要插入的歌名
現在,很多人覺得我們應該要將歌名插入陣列了,可是,歌名從哪來?
這里就應該要用到Scanner了,讓用戶從控制臺輸入一個歌名
//輸入歌曲名稱
Scanner input = new Scanner(System.in);
System.out.print("\n請輸入歌曲名稱:");
music = input.nextLine();
找到插入位置
找到插入位置與陣列中的插入字符原理一樣,不懂可以看看這一篇文章:
跳轉鏈接:Java中如何在陣列中插入一個字符 - 小簡博客 (janyork.com)
https://blog.janyork.com/index.php/archives/414/
我們先前定義了一個 index 來儲存插入位置,我們用回圈將位置(下標)找到并賦值給index
//找到新元素的插入位置
for(int i = 0; i < musics.length; i++){
if(musics[i].compareToIgnoreCase(music) > 0){
index = i;
break;
}
}
利用這個方法比較String值,找出要插入的位置的下標
陣列值后移
找到插入的位置后,此時,這個位置是存在可用數值的,我們在插入字串前,需要將插入位置(index)后面的數后移
//元素后移
for(int i = newMusics.length-1; i > index; i--){
newMusics[i] = newMusics[i-1];
//index下標開始的元素后移一個位置
}
這里這個(int i = newMusics.length-1)是什么,可能許多人有疑問,這個就是 陣列長短-1 ,也就是陣列下標長度,我們從最后一個下標開始,index(插入位置)后面的陣列值都往后移動一個空間,給要插入的歌曲騰出一個位置
好了,此時就可以說是萬事俱備只欠東風了
插入字串
現在,我們將空出的位置賦值
將music(要插入的音樂)賦值個陣列中的index下標(陣列空出位置)
newMusics[index] = music;
重新輸出陣列
System.out.print("插入后的陣列為:");
for(int i = 0; i < newMusics.length; i++){
System.out.print(newMusics[i]+" ");
}
如果還是有不懂,可以自己結合代碼,運行分析,或者聯系我,還有其他字串排序方法,我單獨一篇文章總結
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/312503.html
標籤:java
