Java IndexOutOfBoundsException
Hej
Jag vill att säga ursäkta med språket(Jag är invandrare)
Jag har skapat ett egen ordspel i Java(Mitt första minispel som jag skapar ensam)
Regler är så:
Först man skriver ett ord. Till exempel Sweclockers
Nästa ord som man skriver, måste börja med samma bokstav som förra ordets sista bokstav. Till exempel Sverige.
Efter det emotion. Ord ska ha bara bokstäver och man får inte skriva samma ord två gånger. Spel ska försättas tills när man bryter mot regeln.(eller tusen gångar)
Min kod ses ut så här:
package SelfTest;
import java.awt.*;
import javax.swing.*;
import java.util.List;
import java.util.LinkedList;
public class WordGame extends JFrame{
public static JTextArea ja = new JTextArea(100,100);
public WordGame(){
add(ja);
setSize(500,500);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main (String [] args){
List <String> wg = new LinkedList<String>();
String s = "";
while(s!=null){
for(int i = 0; i<=1000;i++){
s = JOptionPane.showInputDialog("Skriv ord");
s.toLowerCase();
if(s.matches("[a-zA-Z]+")&&(i==0)){
ja.setText(s);
wg.add(s);
}
if(i>0&&s.matches("[a-zA-Z]+")&&!wg.contains(s)) {
if (wg.get(wg.size()).charAt(s.length())==s.charAt(0)){
wg.add(s);
}
}
if(!s.matches("[a-zA-Z]+")){
JOptionPane.showMessageDialog(ja, "Ord kan bestå bara av bokstäver");
break;
}
if(i>0&&wg.contains(s)){
JOptionPane.showMessageDialog(ja, "Du kan inte skriva samma ord två gånger");
break;
}
if(i>0&&wg.get(wg.size()-1).charAt(s.length())!=s.charAt(0)){
JOptionPane.showMessageDialog(ja, "Ordets första bokstav måste ha samma bokstav som förra ordets sista bokstav");
break;
}
}
}
}
}
Jag har två problem de break satserna ligger i while satsen. Men, de fungerar inte. Man försätter visa dialogruta. Varför är det?(Inte viktig fråga)
(Viktig fråga) När man skriver två ord rätt till exempel (han - näsa) programmet visar IndexOutOfBoundsException på raden
if (wg.get(wg.size()).charAt(s.length())==s.charAt(0))
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.LinkedList.checkElementIndex(LinkedList.java:555)
at java.util.LinkedList.get(LinkedList.java:476)
at SelfTest.WordGame.main(WordGame.java:36)
C:\Users\Secret\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 5 seconds)
Men jag förstår inte varför?? man räknar ut listans size och sista index. Med hjälp av charAt vi räknar ut sista indexets sista bokstav och jämför om är det lika med ordets första index som jag skrev nu. Om de är lika, det ord ska adderas till listan.
Förstår jag någonting fel???
JFrame, list och JTextArea jag har inte klarat och jag kan klara det med ingen problem. Jag har skrivit logiska algoritmer först