どのように私は私のワードゲームで境界エラーのうち、この文字列のインデックスを修正しますか?

zeldagirl13:

私はランダムにx、yおよびz、wの文字を用いて、4文字の単語を生成し、ユーザにそれを推測するために10回の試行を与えるクラスの割り当てなどの単語ゲームを作成しています。問題は、私は5つの文字を入力したときに、私が代わりに「推測の長さは、単語の長さと一致しませんでした」印刷の境界エラー(StringIndexOutOfBoundsExceptionを)外の文字列インデックスを取得することです。

それは "lett2 = Character.toLowerCase(word.charAt(WX));" というエラーがであると言います ライン。問題は、私はそれがすべて正しかったと仮定して、私のTAが、私はこのコードの一部を書き助けたということです。何が私が間違っているのでしょうか?

import java.util.Random;
public class GuessingGame{

      private int remainingGuesses;
      private boolean wordFound;
      private static Random rand;
      private String word;

   public GuessingGame(){
      remainingGuesses = 10;
      wordFound = false;
      rand = new Random();
      word = generateWord();
   }
   
   public GuessingGame(int seed){
       remainingGuesses = 10;
       wordFound = false;
       rand = new Random(seed);
       word = generateWord();
     }
   
   public int play(String str){
      
      char lett;
      char lett2;
      int total = 0;
      
      remainingGuesses = remainingGuesses - 1;
      
      for(int wx = 0; wx < str.length(); wx++) {
      
      lett = Character.toLowerCase(str.charAt(wx));
      lett2 = Character.toLowerCase(word.charAt(wx));
      
      if (lett2 == lett) {
         ++total;
         }
      }
      
      if (total == 4) {
         wordFound = true;
   }
 
     return total;
   }
   

   public boolean isOver(){
      if (remainingGuesses == 0)
        return true;
        
      else if (wordFound == true)
        return true;
        
      else 
        return false;  
        }
   
   
   public boolean isWin(){
      if (wordFound == true)
         return true;
      else
         return false;
      }
   
 
   public int getRemainingGuesses(){
      return remainingGuesses;
   }
   
   
   public void reset(){
      remainingGuesses = 10;
      wordFound = false;
      word = generateWord();
   }
   
   
   public String getWord(){
      return word;
   }
   
   
   private String generateWord(){
      String retStr = "";
      
      for (int i = 0; i < 4; ++i) {
         int randomNumber = rand.nextInt(4);
          if (randomNumber == 0) {
         retStr += "W";
    }
         else if (randomNumber == 1) {
         retStr += "X";
    }
         else if (randomNumber == 2) {
         retStr += "Y";
    } 
         else if (randomNumber == 3) {
         retStr += "Z";
    }
 }
      return retStr;
   }
   
}

import java.util.*;

public class GuessingGameMain{

   public static void main(String[] args){
      
      Scanner scan = new Scanner(System.in);
  
      boolean again = true;
      
      System.out.println("Welcome to Guess Me!");
      System.out.println("A random word will be generated. It will be four letters long and\nconsist of the letters 'W', 'X', 'Y', and 'Z'. Your goal\nis to guess the word within the alloted guesses. Good luck!\n\n");
      GuessingGame game = new GuessingGame();
      //GuessingGame game = new GuessingGame(1234);

      while(again){
         while(!game.isOver()){
            System.out.println("You have " + game.getRemainingGuesses() + " guesses left.");
            System.out.println("Enter your guess:");
            String guess = scan.nextLine();
            int score = game.play(guess);
            System.out.println("There are " + score + " correct letter placements.");
            if(guess.length() != 4) {
               System.out.println("The length of the guess did not match the length of the word.");
            }
         }
         if(game.isWin()){
            System.out.println("Congrats!");
         } else {
            System.out.println("You lose! The word was: " + game.getWord());
         }
         System.out.println("Would you like to play again? y/n");
         if(Character.toLowerCase(scan.nextLine().charAt(0)) == 'n'){
            again = false;
         } else {
            game.reset();
         }
      }
      System.out.println("Goodbye!");
   }
}

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
	at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
	at java.base/java.lang.String.charAt(String.java:709)
	at GuessingGame.play(GuessingGame.java:34)
	at GuessingGameMain.main(GuessingGameMain.java:21)

阿部:

あなたの「遊び」メソッドの開始にこの「IF」ステートメントを追加します。それはあなたのために、「大きすぎる」ケースを処理します。

if(str.length() > 4)
{
  System.out.println("Warning! Too many characters detected. Only reading top 4");
  str = str.substring(0,3);
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=25474&siteId=1
おすすめ