2011-06-16 111 views
0

我已經寫了一個java小程序,它似乎在運行時打開sun.applet.AppletViewer。我正在使用Stanford Engineering Everywhere Hangman作業的acm庫。我遇到的問題似乎沒有與代碼,除非我沒有做我應該做的一些實現。基本上Applet Viewer掛着只是說「開始applet ...」,程序沒有運行。我以前沒有遇到過這個問題,所以我想我會問這裏以防有人遇到過這樣的問題。我想這可能是拋出的默認異常情況,但我沒有收到錯誤消息,所以我懷疑它。Applet未運行:Stanford Engineering Everywhere Hangman

我認爲代碼應該可以工作,但是我會發布它,以防在此時出現一些明顯的問題。我沒有完成任務,但是我相信如果我沒有這個問題,它會起作用。

Hangman.java

import acm.graphics.*; 
import acm.program.*; 
import acm.util.*; 

import java.awt.*; 
import java.io.*; 


public class Hangman extends ConsoleProgram { 

//private static final int NUM_GUESSES=8; 

/*new instance of HangmanLexicon.java */ 

private HangmanLexicon hangLex; 

private HangmanCanvas canvas; 

/*new random generator to get indexes of words in hangLex*/ 
//private RandomGenerator rgen = RandomGenerator.getInstance(); 

/*Stores word that use is trying to guess*/ 
private String hidden=""; 

/*Displayed version of hidden*/ 
private String displayHidden = ""; 

/*prompt for player to enter their guess, which gets stored 
* as a string*/ 
private String guess = readLine("Your guess: "); 

/*counts down until user has no more guesses*/ 
private int guessCounter = 8; 

private String repeat = readLine("Play again? (y or n): "); 

public void init() { 
    canvas = new HangmanCanvas(); 
    add(canvas); 
} 

/*Runs through program, acts as main*/ 
public void run() { 
    /* You fill this in */ 


    println("Welcome to the Hangman program!"); 
    while(true) { 
     setUpWord(); 
     displayWord(); 
     guessesLeft(); 
     guess = readLine("Your guess: "); 
     println(guess); 
     checkGuess(); 
     if(displayHidden.equals(hidden)) { 
      println("You guessed the word: " + hidden); 
      println("You win."); 
      println(repeat); 
      if(!repeat.equals("n")) { 
       guessCounter=8; 
       canvas.reset(); 
      }else { 
       break; 
      } 
     } else if (guessCounter==0) { 
      println("The word was: " + hidden); 
      println("You lose."); 
      println(repeat); 
      if(!repeat.equals("n")) { 
       guessCounter=8; 
       canvas.reset(); 
      }else { 
       break; 
      } 
     } 
    } 

} 



/*sets hidden to a random word in hangLex*/ 
private void setUpWord() { 
    hangLex = new HangmanLexicon(); 
    hidden=hidden.concat(hangLex.getWord(8)); 
} 

/*Prints the updated version of the known word after a guess is entered*/ 
private void displayWord() { 
    if (displayHidden.equals("")) { 
     for (int i= 0; i<hidden.length(); i++) { 
      displayHidden = displayHidden.concat("-"); 
     } 
     println("The word now looks like this: " + displayHidden); 
    } else if(guessCounter==0) { 

    } else { 
     println("The word now looks like this: " + displayHidden); 

    } 
} 


/*prints updates on the number of guesses the user has left to console*/ 
private void guessesLeft() { 
    if (guessCounter > 1) { 
     println("You have " + guessCounter + " guesses left."); 
    } else if (guessCounter == 1) { 
     println("You have only one guess left."); 
    } else if (guessCounter == 0) { 
     println("You're completely hung."); 
    } 
} 


private void checkGuess() { 
    int letterCounter =0; 
    while (guess.length()>1) { 
     println("Guesses must be single characters."); 
     println(guess); 
    } 
    char checkLetter = guess.charAt(0); 
    guessCounter--; 

    // 
    if(Character.isLowerCase(checkLetter)) { 
     Character.toUpperCase(checkLetter); 
    } 

    // 
    for(int i=0; i<hidden.length(); i++) { 
     if(hidden.charAt(i) == checkLetter) { 
      displayHidden = displayHidden.substring(0, i) + guess + 
             displayHidden.substring(i+1); 
     } else { 
      letterCounter++; 
     } 
    } 

    // 
    if (letterCounter==hidden.length()) { 
     println("There are no " + checkLetter + "'s in the word."); 
    } else if (letterCounter!=hidden.length()) { 
     println("That guess is correct."); 
    } 

} 
} 

HangmanLexicon.java

import acm.util.*; 

public class HangmanLexicon { 


/** Returns the number of words in the lexicon. */ 
public int getWordCount() { 
    return 10; 
} 

/** Returns the word at the specified index. */ 
public String getWord(int index) { 
    switch (index) { 
     case 0: return "BUOY"; 
     case 1: return "COMPUTER"; 
     case 2: return "CONNOISSEUR"; 
     case 3: return "DEHYDRATE"; 
     case 4: return "FUZZY"; 
     case 5: return "HUBBUB"; 
     case 6: return "KEYHOLE"; 
     case 7: return "QUAGMIRE"; 
     case 8: return "SLITHER"; 
     case 9: return "ZIRCON"; 
     default: throw new ErrorException("getWord: Illegal index"); 
    } 
}; 
} 

我還沒有與其他文件完成,但我不認爲應該關注的一個問題,事,直到我已經整理了applet的東西。

+0

2個問題:1)什麼是用於啓動這個小程序的hTML? 2)你有沒有問題? – 2011-06-16 06:12:45

+0

1.我不知道它是否使用html。它應該運行在一個單獨的窗口中,我同意它對applet來說有點不合常規,但它是針對一個類的,所以我不認爲它們會使用html。我只是想知道懸掛是否有任何解釋 – Slayer0248 2011-06-16 15:58:53

回答

0

沒關係。我解決了這個問題。我應該在跑步方法中這樣做。

guess = readLine("Your guess: "); 

這是我的一個非常愚蠢的錯誤。大聲笑。我以爲我已經試過了。