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-18 10:59 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:使用兩個Block是否正確,可有其他不使用Block的方法?
Q2:使用break及continue跳出迴圈是否正確?
Q3:程式碼執行後,在輸入查詢分數68之後,應該為李四68分,而我的輸出畫面卻沒有68這個分數,
請問BUG在那一行?
敬祝
順頌時祺
問題:
建立兩個長度同為6的陣列,一個陣列內容為姓名,另一個內容為分數,使用者輸入分數後,可以查詢得到此分數的所有人是誰(使用循序搜尋法)。
要求輸出畫面:
-------------------------------------------------------------------------------------------------------------------------
|請輸入查詢的分數(輸入-1結束):60 (請按Enter鍵)
|沒有60這個分數!
|請輸入查詢的分數(輸入-1結束):68 (請按Enter鍵)
|李四68分
|請輸入查詢的分數(輸入-1結束):-1 (請按Enter鍵)
|結束查詢!
-------------------------------------------------------------------------------------------------------------------------
我撰寫的程式碼:
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
import java.util.Scanner;
public class Ch04_04 {
  public static void main(String[] args) {
    String[] name = new String[] { "陳一", "林二", "張三", "李四", "王五", "吳六" };
    int[] score = new int[] { 76, 87, 97, 68, 89, 90 };
    int input;
    Scanner scn = new Scanner(System.in);
    Block1: do {
      System.out.print("請輸入查詢的分數(輸入-1結束):");
      input = scn.nextInt();
      Block2: for (int i = 0; i < score.length; i++) {
            if (score[i] == input) {
            System.out.println(name[i] + score[i] + "分");
          break Block2;
        } else if (input == -1) {
          System.out.println("結束查詢!");
          break Block1;
        } else {
          System.out.println("沒有" + input + "這個分數!");
          continue Block1;
        }
      }
    } while (input != -1);
  }
}               

我的輸出畫面:
-------------------------------------------------------------------------------------------------------------------------
請輸入查詢的分數(輸入-1結束):60 (請按Enter鍵)
沒有60這個分數!
請輸入查詢的分數(輸入-1結束):68 (請按Enter鍵)
沒有68這個分數!
請輸入查詢的分數(輸入-1結束):-1 (請按Enter鍵)
結束查詢!
-------------------------------------------------------------------------------------------------------------------------


reply to postreply to post
William
作者 Re:也是陣列的問題-續 [Re:劉武陵]
ynchang





發文: 151
積分: 0
於 2019-01-18 11:39 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
試著想像一下這個題目原本要求的情境, 如下:
1. 一個排隊的隊伍中有六個人, 你想要詢問他的的成績是否為某個數值
2. 從第一個人開始詢問每個人的成績是否符合這個數值
3. 如果問到的成績符合那個數值, 就顯示找到犯人.
4. 如果問到的成績不符合, 就問下一個人.
5. 如果所有人的成績都不符合數值, 就顯示查無此人

你程式的情境, 如下:
1. 一個排隊的隊伍中有六個人, 你想要詢問他的的成績是否為某個數值
2. 從第一個人開始詢問每個人的成績是否符合這個數值
3. 如果第一個人的成績符合那個數值, 就顯示找到犯人.
4. 如果第一個人的成績不符合那個數值, 就顯示查無此人.

你再想想看要怎麼修改自己的程式, 讓流程符合原本題目的要求.


reply to postreply to post
作者 Re:也是陣列的問題-續 [Re:劉武陵]
frankiewu





發文: 11
積分: 0
於 2019-01-18 11: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
你這個問題 我之前就有發現了
妳試一下,我幫你加印了一個數字 ,你可以比對一下 ,跟你自己的ˊ程式碼差在哪邊
程式碼是你自己寫的 邏輯應該最清楚

你提出的重點沒錯 確實就是continue 的問題
至於你說的另外一個沒有使用block 的方式 請參考第二段得程式碼
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
import java.util.Scanner;
 
public class  main{
    public static void main(String[] args) {
        String[] name = new String[]{"陳一", "林二", "張三", "李四", "王五", "吳六"};
        int[] score = new int[]{76, 87, 97, 68, 89, 90};
        int input;
        Scanner scn = new Scanner(System.in);
        Block1:
        do {
            System.out.print("請輸入查詢的分數(輸入-1結束):");
            input = scn.nextInt();
            Block2:
            for (int i = 0; i < score.length; i++) {
                System.out.println(score[i]+"分數");
                if (score[i] == input) {
                    System.out.println(name[i] + score[i] + "分");
                    break Block2;
                } else if (input == -1) {
                    System.out.println("結束查詢!");
                    break Block1;
                } else {
                    System.out.println("沒有" + input + "這個分數!");
                    continue ;
                }
            }
        } while (input != -1);
    }
}

假如是這種題目我會這樣寫
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
import java.util.HashMap;
import java.util.Scanner;
 
public class  main{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        HashMap<Integer, String> student = new HashMap<>();
        student.put( 76,"陳一");
        student.put( 87,"林二");
        student.put(97, "張三");
        student.put(68,"李四");
        student.put(89, "李四");
        student.put(90, "吳六");
        int input;
        boolean controller=true;
        while (controller){
            System.out.println("請輸入查詢分數:");
            input=sc.nextInt();
            if(student.containsKey(input)){
                System.out.println("有找到:"+student.get(input));
            }else if(input==-1){
                controller=false;
            }
            else {
                System.out.println("沒找到");
            }
        }
    }
}
 


reply to postreply to post
作者 Re:也是陣列的問題-續 [Re:frankiewu]
劉武陵





發文: 12
積分: 0
於 2019-01-20 12: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
frankiewu :
您好!謝謝你幫我解答問題,你另外撰寫的程式碼對我幫助很大,謝謝,後會有期。


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