Loading...
Viktorcho avatar Viktorcho 0 Точки

Проблем относно игра на java

public class Hangman {
    static boolean replay = true; 
    private static Scanner kb = new Scanner(System.in); 
    public static void main(String[] args) {
        RandomAccessFile raf; 
        try{
        System.out.println("Welcome to the game of HangMan"); 
        raf= new RandomAccessFile("Hangman","rw"); 
        String x; 
         while(replay==true){ 
         x=raf.readLine(); 
         PlayGame(x); 
         CarryOn();
         }
        }
        catch(Exception e){ 
        JOptionPane.showMessageDialog(null,e);  
        }
    }

    
      public static void PlayGame(String word){ 
      word =word.toLowerCase(); 
      String hiddenWord = ""; 
      for(int i=0;i<word.length();i++){ 
         hiddenWord+="-";  
      }
      
      String tempHidden = ""; 
      String guesses = "";
      int bodyparts = 6;
      String letter;
       boolean finished = false; 
       while(finished == false ){ 
          System.out.println("Number of body parts left:"+bodyparts); 
          System.out.println("Guesses:"+guesses); 
          System.out.println(hiddenWord); 
          System.out.println("Enter a Letter: "); 
          letter = kb.nextLine();
          for(int x =0;x<word.length();x++){   
           if(letter.charAt(0)==word.charAt(x)) {      
               // word then is true
            tempHidden +=word.charAt(x);   
           }
           else{
                tempHidden +=hiddenWord.charAt(x);             
           }
          }
          String splitWord[] = word.split("");  
           for(int z=0;z<splitWord.length;z++){ 
            if(letter.equalsIgnoreCase(splitWord[z])) {
               break; 
            }
            else if(z==splitWord.length-1){ 
               bodyparts--; 
               break;
               
           }  
           }
          hiddenWord = tempHidden; 
          tempHidden = "";
          if(hiddenWord.equalsIgnoreCase(word) ){ 
              finished = true; 
              System.out.println("Well done you guessed the word!:"+word); 
          }
          if(bodyparts ==0){ 
              finished=true;
              System.out.println("Boo you lose!:"+word); 
          }
          String split[] = guesses.split(" "); 
          for(int i =0;i<split.length;i++)
        {
           if(letter.equalsIgnoreCase(split[i])) 
           {
             System.out.println("letter has allready been entered"); 
           }
           else if(i==split.length-1){ 
               guesses += letter+" "; 
               
               
           }  
        }       
      } 
    }
    
      
      public static void CarryOn(){ 
        System.out.println("Do you want to play again?"+"\n"+"Y/N");
        String choice = kb.nextLine(); 
        if(choice.equalsIgnoreCase("y")){ 
           System.out.println("New Game"+"\n");  
           
        }
        else if(choice.equalsIgnoreCase("n")){ 
            replay = false; 
            
        }
        else{
          System.out.println("Inaccurate choice. Ending program");  
          System.exit(0);      
        }     
    }
    
}

Това е кода, обаче когато го стартирам ми излиза съобщението "java.lang.NullPointerException". Някакви идеи ?

Тагове:
MartinBG avatar MartinBG 4803 Точки
Best Answer

x=raf.readLine(); 

x e null, защото файлът е празен.

От дoкументацията на readLine:

Returns:
the next line of text from this file, or null if end of file is encountered before even one byte is read.

Програмата гърми на първия ред в playGame(String word), защото word е null.

word = word.toLowerCase();

 

След като стартираш програмата (и ти гръмне), виж къде е създала файла Hangman. Отвори го в текстов редактор (без да му променяш мястото или името!), добави някоя дума и стартирай наново програмата.

0
11/12/2018 04:20:31
Viktorcho avatar Viktorcho 0 Точки

Да стана, благодаря.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.