Java完成簡單猜數字遊戲v2.0,java猜數字v2.0

來源:互聯網
上載者:User

Java完成簡單猜數字遊戲v2.0,java猜數字v2.0

猜數字遊戲v2.0 最佳化了擷取隨機數、輸入資料超出邊界值的代碼,並增加了異常處理,能夠在玩家輸入錯誤資料錯誤時給出可靠指引,希望對和我一樣的新人有協助,

最後希望有大神願意幫我解決代碼最佳化的問題,謝謝。

/*需求:
*1. 玩家輸入錯誤類型資料時,要求重新輸入;
*2. 最佳化輸入整數超出區間部分的代碼;
*3. 最佳化擷取隨機數部分的代碼;
*思路:
*1. 建立一個函數,要求必須輸入整數;
*2. 超邊界後有更加清晰的提示,能夠正確指引玩家輸入;
*3. 引入帶標號的while迴圈,內層迴圈結束後,跳至指定標號,即可重新開始,不必重新擷取隨機數;
*步驟:
*1. 建立getInteger函數,引入try-catch,在輸入非int情形下要求重新輸入,利用continue,直到玩家輸入整數為止;
*2. 針對玩家輸入的資料與區間上下限作比較,超出後給出超上限或者超下限的提示;
*3. 針對玩家輸入的區間上限低於下限時,給出正確的錯誤提示,並要求使用者能夠重新輸入上限值;
*4. while迴圈添加一個標號outer,玩家輸入yes後,繼續outer迴圈,其他情況就結束outer迴圈,即結束遊戲。

* +++++++++++++++++
*                缺點
* 太多迴圈嵌套,需要繼續最佳化。
* +++++++++++++++++
*/

  1 import java.util.*;  2 public class GuessGame  3 {  4     public static void main(String[] args)  5     {  6         outer:while (true)   7         {  8             //確認競猜資料的下限  9             Scanner guessMin = new Scanner(System.in); 10             System.out.println("歡迎來到猜數字遊戲v2.0!\n請輸入您要競猜資料的下限:"); 11             int min = getInteger(); 12             //確認競猜資料的上限 13             while(true) 14             { 15                 Scanner guessMax = new Scanner(System.in); 16                 System.out.println("請輸入您要競猜資料的上限:"); 17                 int max = getInteger(); 18                 if(max < min) 19                 { 20                     System.out.println("您輸入的競猜資料上限低於上限,請重新輸入。"); 21                     continue; 22                 } 23                 //產生一個指定區間的隨機數,Math.random()產生一個[0,1)之間的double類型的隨機數。 24                 int givenNumber = (int)(Math.random()*(max-min+1)) + min; 25                 //System.out.println("系統已產生的隨機數:"+givenNumber);//測試時可取消注釋 26                 System.out.println("系統已產生一個[" + min + "," + max + "]區間的隨機數,來競猜吧!"); 27                 //引入count,用來計算輸入次數 28                 int count = 0; 29                 while(true) 30                 { 31                     //玩家輸入猜想的資料 32                     Scanner sc = new Scanner(System.in); 33                     try  34                     { 35                         System.out.println("在這個給定區間,[" + min + "," + max + "]"+",請輸入您所猜想的資料:"); 36                         count++ ; 37                         int guessNumber = sc.nextInt(); 38                         //大於判斷,將max-1的目的是為了更加精準範圍 39                         if (guessNumber > givenNumber)  40                         { 41                             //此處是針對輸入值超出上限時的一個判斷,避免誤導玩家 42                             if (guessNumber > max) 43                             { 44                                 System.out.println("太可惜了,您在第" + count + "次輸入的資料是"+guessNumber+",超出了區間上限。"); 45                             } 46                             else 47                             { 48                                 max = guessNumber-1; 49                                 System.out.println("太可惜了,您在第" + count + "次猜大了,請繼續:"); 50                             } 51                         }  52                         //小於判斷,將min+1的目的是為了更加精準範圍 53                         else if (guessNumber < givenNumber) 54                         { 55                             //此處是針對輸入值超出上限時的一個判斷,避免誤導玩家 56                             if (guessNumber < min) 57                             { 58                                 System.out.println("太可惜了,您在第" + count + "次輸入的資料是"+guessNumber+",超出了區間下限。"); 59                             } 60                             else 61                             { 62                                 min = guessNumber+1; 63                                 System.out.println("太可惜了,您在第" + count + "次猜小了,請繼續:"); 64                             } 65                         }  66                         //等於判斷,並詢問是否繼續遊戲 67                         else 68                         { 69                             System.out.println("太贊了,您花了" + count + "次就猜中了這個隨機數," + givenNumber + "。"); 70                             //是否繼續遊戲 71                             System.out.println("\n輸入yes繼續挑戰,按任意鍵退出。\n"); 72                             sc = new Scanner(System.in); 73                             String str = sc.nextLine(); 74                             if ("yes".equals(str))  75                             { 76                                 continue outer; 77                             }  78                             else 79                             { 80                                 System.out.println("歡迎使用猜數字遊戲v2.0,再見!\n"); 81                                 break outer; 82                             } 83                         } 84                     }  85                     catch (InputMismatchException e)  86                     { 87                         System.out.println("您輸入的資料有誤,請重新輸入一個區間內的整數。\n"); 88                     } 89                 } 90             } 91         } 92     } 93     public static int getInteger()//對擷取的資料進行分析,是整數繼續,不是整數就要求重新輸入 94     { 95         while(true) 96         { 97             Scanner in = new Scanner(System.in); 98             int getNum = 0; 99             String str = in.nextLine();100             boolean b = true;101             try102             {103                 getNum = Integer.parseInt(str);//如果輸入是int類型,則把值轉化成整型賦給getNum104             }105             catch(Exception e)//不是整數則讓b為false106             {107                 b = false;108             }109             if(b)//如果b是false則要求重新輸入110             {111                 System.out.println("您輸入的整數是:"+getNum);112             }113             else114             {115                 System.out.println("輸入錯誤,請重新輸入一個整數。");116                 continue;117             }118             return getNum;//函數返回使用者輸入的整數119         }120     }121 }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.