2015-11-17 57 views
1

這是我在這個網站上的第一篇文章,所以我非常抱歉,如果我違反規則或我不知道的東西。也就是說,我被指派由我的老師製作一個SimonSays的課程,我正在爲這個課程苦苦掙扎,所以我正在尋找其他的幫助途徑。規則如下:爪哇西蒙說方案問題

完成此任務的方式完全取決於您。代碼必須完全按照指定的方式工作以獲得適當的信用。你會設計比賽西蒙。在西蒙有四種顏色:紅色,藍色,綠色和黃色。用戶必須按照正確的順序選擇Simon採用的相同顏色。 Simon選擇的顏色必須是隨機的。每個連續輪Simon都會在序列中添加另一種顏色。當用戶失敗時,西蒙應該告訴用戶他們持續了多少輪。你可以玩多少回合不應該有限制。此任務不需要GUI。如果您使用JOptionPane選擇顏色,則必須使用紅色,藍色,綠色和黃色的字母快捷方式。您還必須包含遊戲說明。您還必須跟蹤每場比賽的高分,並允許用戶輸入他們的名字以獲得高分。如果關閉該程序,則不必保持分數;只有在程序打開時。

當我執行我的代碼時,它不會在用戶給出正確答案時繼續遊戲,而是在一次循環後終止。奇怪的是,它似乎只是循環,如果我給它一個錯誤的答案。最後,我想指出,我的程序是非常基礎的,因爲這是我真正知道如何使用的。感謝您的幫助

package stuff; 

import java.util.ArrayList; 

import javax.swing.JOptionPane; 

public class Simon { 
    String s = ""; 
    String a = ""; 
    String c = ""; 
    String d = ""; 
    boolean b = true; 
    boolean b2 = true; 
    String obj[] = { "Red", "Yellow", "Green", "Blue" }; 
    ArrayList<String> colors = new ArrayList<String>(); 
    String[] options = new String[] { "Red", "Yellow", "Green", "Blue" }; 
    int count = 0; 
    int count2 = 0; 
    int score = 0; 

    public String simon() { 
      do { 
       int c = ((int) (Math.random() * 4)); 
       if (c == 0) 
        colors.add(obj[0]); 
       else if (c == 1) 
        colors.add(obj[1]); 
       else if (c == 2) 
        colors.add(obj[2]); 
       else if (c == 3) 
        colors.add(obj[3]); 
       else { 
        JOptionPane.showMessageDialog(null, 
          "weird stuff happened bruh"); 
       } 
       JOptionPane.showMessageDialog(null, colors.get(count)); 
       b2 = true; 
       while (b2) { 
        for (int i2 = 0; i2 < colors.size(); i2++) { 
         a = JOptionPane.showInputDialog("put letter"); 
         if(a != null){ 
         if (a.equalsIgnoreCase(colors.get(i2))) { 
          JOptionPane.showMessageDialog(null, 
            "Your color is right" + score); 
          score += 1; 
          if (i2 == colors.size() - 1) 
           b2 = false; 
          else { 
           JOptionPane.showMessageDialog(null, "weird stuff happened bruh fo realz"); 
          } 
         } else { 
          b2 = false; 
          b = false; 
         } 
        }else{ 
         System.exit(0); 
        } 
       } 
       } 
       count++; 
      } while (b == false); 

     return s; 
    } 
} 
+3

爲什麼你使用'''試穿catch'''塊了'''NullPointerException''',然後就退出無記錄有關例外的任何事情?至少使用'''npe.printStackTrace()'''這樣你就可以看到什麼導致了這個異常。 –

+0

當我在搜索錯誤時遇到了錯誤,我在其他網站上找到了解決方案,該解決方案一直爲我完美工作。如果還有其他方法可以避免這個錯誤,你能告訴我嗎? –

+2

避免此錯誤的適當方法是不要嘗試在空對象上調用對象方法。這意味着你去到拋出錯誤的那一行,找出哪個對象爲空,以及爲什麼它沒有初始化爲你期望的值。 –

回答

0

你的代碼不需要多少,而且你的代碼比它應該更難:)。

我發佈了代碼來展示如何使用兩個單循環來製作程序,以及一個檢查來打擊那個討厭的當用戶取消輸入時正在創建的NullPointerException。

public String simon() { 
    while(true){ 
     generateColor(); 
     for(int i = 0; i < colors.size(); i++){ 
      JOptionPane.showMessageDialog(null, "Color #"+i+" is: "+colors.get(i)); 
     } 
     for(int i = 0; i < colors.size(); i++){ 
      String input = JOptionPane.showInputDialog("Type in #"+i+" color: "); 
      if(input == null){ 
       System.out.println("User typed in wrong input"); 
       return "Program ended unsuspectively"; 
      } 
      if(input.equalsIgnoreCase(colors.get(i))){ 
       System.out.println("You were correct!"); 
      } 
      else{ 
       System.out.println("you wasnt correct"); 
       return "You ended with a score of: "+score; 
      } 
     } 
     score++; 
    } 
} 

private void generateColor(){ 
    int c = (int)(Math.random() * 4); 
    colors.add(obj[c]); 
}  

希望這有助於,有一個愉快的一天:)