내 AP 컴퓨터 과학 수업을 행맨 게임을 만들고있어 문자열 문제를 해결하는 방법을 찾지 못했습니다. 경계 밖의 오류가 발생합니다. 문자열 색인이 범위를 벗어 : 7왜 내 문자열 인덱스가 범위를 벗어 났습니까?
여기 발생 : 그것은 어떤 도움 경우 여기
if(theGuess.equals(wordToGuess.substring(i,i+1)))
프로그램 코드는
java.lang.StringIndexOutOfBoundsException 말한다.
이 문제는 앞의import javax.swing.JOptionPane; public class Hangman extends BasicGame { private final String WORDCHOICES= "apple"+"great"+"zebra"+"mouse"+"chick"+"class"+"abhor"+"abide" +"fuzzy"+"brute"+"blunt"+"comic"+"cater"+"stone"+"chaos"+"dufus"+"earth"+"decal"+"happy"+"heist" +"idler"+"lions"+"hates"+"idols"+"lasso"+"lives"+"lisps"+"major"+"mound"+"mango"+"meter"+"mercy" +"marry"+"pilot"+"plots"+"pants"+"overt"+"quack"+"paver"+"polls"+"scorn"+"sapid"+"sails"+"rowdy" +"seeks"+"leech"+"seats"+"spade"+"shoes"+"slurp"; private String wordToGuess; private java.util.Random randy; private int wordNum; private int numCorrect=0; private String[] correctLetters= new String[]{"","","","",""}; HangDraw artist= new HangDraw(); public Hangman() { super(); randy= new java.util.Random(); for(int i = 0; i<5;i++) correctLetters[i]=null; wordNum=0; numCorrect=0; artist.setUp(); } public void guess() { wordNum= 5*randy.nextInt(50); numCorrect=0; int wrong=0; String userGuess=""; int partsDrawn=0; wordToGuess=WORDCHOICES.substring(wordNum,wordNum+5)+" "; while(numCorrect<5&& partsDrawn<5) { userGuess= JOptionPane.showInputDialog("Guess a letter, so far you have: "+ correctLetters[0]+ correctLetters[1]+correctLetters[2]+correctLetters[3]+correctLetters[4]); if(checkLetter(userGuess)) { JOptionPane.showMessageDialog(null, "Correct Guess"); //print the letter } else { //draw the part of the body JOptionPane.showMessageDialog(null,"incorrect"); partsDrawn++; artist.drawParts(partsDrawn); } } if(partsDrawn==5) { JOptionPane.showMessageDialog(null, "failed to guess, the word is: "+wordToGuess); } else { JOptionPane.showMessageDialog(null, "correct, the word was: "+ wordToGuess); } } private boolean checkLetter(String theGuess) { boolean matches=false; for(int i=0;i<wordToGuess.length();i++) { if(theGuess.equals(wordToGuess.substring(i,i+1))) { correctLetters[i]=theGuess; matches=true; numCorrect++; } } return matches; } }
for
루프 범위를 벗어날 것을 당신이
당신은'WORDCHOICES'는 다음과 같은 문자열 알고 있습니까? 배열을 사용하지 않는 이유는 무엇입니까? 그러면 단어가 5 자로 제한되지 않습니다. – Cruncher
배열을 사용하기로되어 있지는 않았지만 선생님은 250 자 문자열로 50 5 자의 단어를 원했습니다. 조언을 해주셔서 감사합니다. – abysmaldan
매일 같이 선생님이 만든 다른 미친 요구 사항이있는 것처럼 보입니다. 문자열 조작을 가르치고 싶다면, 배열/콜렉션에서 훨씬 더 나은 해를 가진 예제를 사용하지 마십시오. 분명히 그것은 당신의 잘못이 아니며, 나는 때때로 정말로 이해하지 못합니다. – Cruncher