JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區 » 學習筆記  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 關於陣列的問題
劉武陵





發文: 12
積分: 0
於 2019-01-07 03:13 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
版主:
你好!我想請問關於這個程式應如何撰寫才能輸出如方框的結果?
Q1:雙排序是不是先將其中一個陣列排序好,再排序另一個陣列,有沒有另外的方法?可以同時排序兩個陣列嗎?
Q2:使用氣泡排序法排序姓名字串陣列,是不是在要排序的陣列元素值後面加上.charAt(0)來表示陣列元素值的第一個字元,依照其筆劃數大小,來排序陣列?
請回答以上兩個問題。
請將正確的程式碼告之或修改我撰寫的程式碼。謝謝。
敬祝
順頌時祺
問題:
建立一個姓名陣列及一個同樣長度的年齡陣列,使用者可以依選項選擇將年齡由小到大,或由大到小排序(使用氣泡排序法),並搭配姓名輸出。
-------------------------------------------------------------------------------------------------------------------------
String[] name = new String[] {"陳一", "林二", "張三", "李四", "王五"};
int[] age = new int[(] {56, 45, 51, 48, 35};
-------------------------------------------------------------------------------------------------------------------------
要求輸出畫面:
-------------------------------------------------------------------------------------------------------------------------
| 選擇按年齡排序方式,請輸入1或2(1.遞增2.遞減):1 (按Enter鍵) |
| 排 序 後 : |
| 王五35歲, 林二45歲, 李四48歲, 張三51歲, 陳一56歲, |
|或 |
| 選擇按年齡排序方式,請輸入1或2(1.遞增2.遞減):2 (按Enter鍵) |
| 排 序 後 : |
| 陳一56歲, 張三51歲, 李四48歲, 林二45歲, 王五35歲, |
-------------------------------------------------------------------------------------------------------------------------
我撰寫的程式碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.Scanner;
public class Ch04_03{
      public static void main(String[] args){
           String[] name = new String[] {"陳一", "林二", "張三", "李四", "王五"};
           int[] age = new int[]{56, 45, 51, 48, 35};
           int m = name.length;
           int n = age.length;
           String s;
           int t, sel;
           Scanner scn = new Scanner(System.in);
           do{
                 System.out.print("選擇按年齡排序方式,請輸入1或2(1.遞增2.遞減):");
                 sel = scn.nextInt();
                 if (sel == 1){
                     for (int i = n - 2; i >= 0; i--){
                         for (int j = 0; j <= i; j++){
                              if (age[j] > age[j + 1]){
                                  t = age[j];
                                 age[j] = age[j + 1];
                                 age[j + 1] = t;
                              }
                         }
                     }
                     for (int i = m - 2; i >= 0; i--){
                          for (int j = 0; j <= i; j++){
                              if (name[j].charAt(0) > name[j + 1].charAt(0){
                                  s = name[j];
                                  name[j] = name[j +1];
                                  name[j + 1] = s;
                              }
                          }
                      }
                     System.out.println("排  序  後:");
                     for (int i = 0; i < age.length; i++)
                         System.out.print(name[i] + age[i] + "歲,");
                     System.out.println();
                     System.out.println("或");
                } else {
                     for (int i = n - 2; i  >= 0; i--){
                         for (int j = 0; j <= i; j++){
                              if (age[j] < age[j + 1]){
                                  t = age[j];
                                 age[j] = age[j + 1];
                                 age[j + 1] = t;
                              }  
                          }
                      }
                      for (int i = n - 2; i >= 0; i--){
                           for (int j = 0; j <= i; j++){
                                if (name[j].charAt(0) < name[j + 1].charAt(0)){
                                    s = name[j];
                                    name[j] = name[j + 1];
                                    name[j + 1] = s;
                                }
                           }
                       }
                      System.out.println("排  序  後  :");
                      for (int i = 0; i < name.length; i++)
                          System.out.print(name[i] + age[i] + "歲,");
                      System.out.println();
                      break;
                  }
             }while (sel == 1 || sel == 2);
        }
}

我的輸出畫面:
<與要求輸出畫面的姓名排序不同,但是年齡排序正確,不知程式碼錯誤在那一行?請告之。>
選擇按年齡排序方式,請輸入1或2(1.遞增2.遞減):1
排 序 後 :
張三35歲, 李四45歲, 林二48歲, 王五51歲, 陳一56歲,

選擇按年齡排序方式,請輸入1或2(1.遞增2.遞減):2
排 序 後 :
陳一56歲, 王五51歲, 林二48歲, 李四45歲, 張三35歲,


劉武陵 edited on 2019-01-15 17:02
reply to postreply to post
William
作者 Re:關於陣列的問題 [Re:劉武陵]
劉武陵





發文: 12
積分: 0
於 2019-01-19 23:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
版主:
您好!因為我的問題沒有人可以回答,所以我已經用Google搜尋Java程式碼,得到令我滿意的答覆,以下是正確的程式碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Scanner;
 
public class Ch04_03 {
  public static void main(String[] args) {
    String[] name = new String[] { "陳一", "林二", "張三", "李四", "王五" };
    int[] age = new int[] { 56, 45, 51, 48, 35 };
    int n = age.length;
    String s;
    int t, sel;
    Scanner scn = new Scanner(System.in);
    System.out.print("選擇按年齡排序方式,請輸入1或2(1.遞增2.遞減):");
    sel = scn.nextInt();
    if (sel == 1) {
      for (int i = n - 2; i >= 0; i--) {
        for (int j = 0; j <= i; j++) {
          if (age[j] > age[j + 1]) {
            t = age[j];
            age[j] = age[j + 1];
            age[j + 1] = t;
            s = name[j];
            name[j] = name[j + 1];
            name[j + 1] = s;
          }
        }
      }
      System.out.println("排 序 後:");
      for (int p = 0; p < age.length; p++)
        System.out.print(name[p] + age[p] + "歲,");
    } else {
      for (int i = n - 2; i >= 0; i--) {
        for (int j = 0; j <= i; j++) {
          if (age[j] < age[j + 1]) {
            t = age[j];
            age[j] = age[j + 1];
            age[j + 1] = t;
            s = name[j];
            name[j] = name[j + 1];
            name[j + 1] = s;
          }
        }
      }
      System.out.println("排 序 後:");
      for (int p = 0; p < age.length; p++)
        System.out.print(name[p] + age[p] + "歲,");
    }
  }
}

在這邊謝謝版主的幫助。並向各位同好先進們致上最高的謝意。再見!


劉武陵 edited on 2019-01-19 23:31
reply to postreply to post
William
作者 Re:關於陣列的問題 [Re:劉武陵]
clock

小時候在看國外測試機器人的影片



發文: 65
積分: 0
於 2019-01-20 05:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
這是用 hashmap 排序 的分享
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static void main(String[] args) {
 
        HashMap<Integer, String> hmap = new HashMap();
        hmap.put(56, "陳一");
        hmap.put(45, "林二");
        hmap.put(51, "張三");
        hmap.put(48, "李四");
        hmap.put(35, "王五");
        
        System.out.println("遞增");
        
        for (int i = 0; i < 100; i++) {
            if (hmap.get(i) != null) {
                System.out.println(hmap.get(i) + " " + i + "歲");
            }
        }
      System.out.println("-------------------------");
        System.out.println("遞減");
        for (int i = 100; i >= 0; i--) {
            if (hmap.get(i) != null) {
                System.out.println(hmap.get(i) + " " + i + "歲");
            }
        }
 
    }


clock edited on 2019-01-20 05:53
reply to postreply to post
c:你好像很喜歡研究機械產品
X:我從小就跟博士做研究
c:哪位博士
X:南宮博士
作者 Re:關於陣列的問題 [Re:clock]
劉武陵





發文: 12
積分: 0
於 2019-01-21 09:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝clock的幫忙,你的程式碼對我幫助很大,謝謝。

reply to postreply to post
William
» JWorld@TW »  Java 新手區 » 學習筆記

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8