ubg7325Medlem sedan dec. 20114 inlägg Hej!
Jag är helt ny här och även väldigt ny när det kommer till programmering. Jag har arbetat lite i Flash men arbetar nu i Java i och med att jag läser programmering B. Jag har råkat ut för ett problem. Av någon anledning dyker denna text upp när jag ska köra programmet.
Exception in thread "main" java.lang.StackOverflowError
Vad betyder det?
Jon@sMedlem sedan dec. 2010159 inlägg Det betyder nog att programmet har använt för mycket stack-minne.
Om du visar koden så kan vi nog peka ut vad det beror på också.
ubg7325Medlem sedan dec. 20114 inlägg Jag har väldigt många klasser, ska jag visa alla?
ubg7325Medlem sedan dec. 20114 inlägg //main klass
package craps;
import java.util.*;
public class Craps {
public static void main(String[] args){
Scanner intreader=new Scanner(System.in);
Scanner stringreader=new Scanner(System.in);
player[] players=new player[30];
LinkedList listOfPlayers=new LinkedList();
playerlist pList=new playerlist();
game Game=new game();
int choice=0;
boolean playing=true;
boolean game=true;
boolean menu=true;
pList.loadPlayers(listOfPlayers);
while(game){
while(menu){
System.out.println("Meny");
System.out.println("1. Skapa en ny spelare");
System.out.println("2. Ta bort en spelare");
System.out.println("3. Spela");
System.out.println("4. Regler");
System.out.println("5. Highscore");
System.out.println("6. Avsluta");
choice=intreader.nextInt();
System.out.println("");
playing=true;
menu=false;
}
switch(choice){
case 1:
pList.addPlayer(listOfPlayers);
System.out.println("Du har nu registrerat dig.");
System.out.println("");
menu=true;
break;
case 2:
pList.deletePlayers(listOfPlayers);
System.out.println("");
menu=true;
break;
case 3:
if(listOfPlayers.size()!=0){
pList.choosePlayer(listOfPlayers);
}
if(listOfPlayers.size()==0){
System.out.println("Det finns inga spelare. Du måste registrera dig först.");
System.out.println("");
menu=true;
}
break;
case 4:
break;
case 5:
pList.highscore(listOfPlayers);
System.out.println("Highscore:");
pList.write(listOfPlayers);
System.out.println("");
menu=true;
break;
case 6:
pList.savePlayers(listOfPlayers);
System.out.println("Hej då!");
game=false;
break;
default:
System.out.println("Det där valet finns inte. Välj genom att skriva alternativets siffra.");
menu=true;
break;
}
}
}
}
//player klass
package craps;
public class player {
private String name;
int money;
public player(String n, int m){
name=n;
money=m;
}
public String getName(){
return name;
}
public int getMoney(){
return money;
}
public String toString(){
return(name+ " har " + money + ":-");
}
}
//klassen playerlist
package craps;
import java.io.*;
import java.util.*;
public class playerlist {
Scanner intreader=new Scanner(System.in);
Scanner stringreader=new Scanner(System.in);
game Game=new game();
public int playerNumber;
public void addPlayer(LinkedList list){
System.out.println("Vad heter du?");
String name=stringreader.next();
int money=100;
player temp=new player(name, money);
list.add(temp);
}
public void playerNow(LinkedList list){
player temp =(player)list.get(playerNumber);
System.out.println(temp.getName());
}
public void moneyNow(LinkedList list){
player temp=(player)list.get(playerNumber);
System.out.println(temp.getMoney());
}
public void savePlayers(LinkedList list){
try{
FileWriter fw=new FileWriter("spelare.txt");
BufferedWriter bw=new BufferedWriter(fw);
PrintWriter utFil=new PrintWriter (bw);
for (int i = 0; i < list.size(); i++) {
player temp=(player)list.get(i) ;
String name=temp.getName();
int money=temp.getMoney();
utFil.println(name + "\t" + money);
}
utFil.close();
System. out.println("Spelet har sparats");
}
catch(IOException e){
System.out.println("Sparningen misslyckades");
}
}
public void deletePlayers(LinkedList list){
System.out.println("Vilken användare vill du ta bort?");
String name=stringreader.next();
boolean saknas=true;
for(int i=0; i<list.size()&&amp;saknas; i++){
player temp=(player)list.get(i);
if(temp.getName().equalsIgnoreCase(name)){
System.out.println("Är du säker på att du vill ta bort "+name+"?");
String answer=stringreader.next();
if(answer.equalsIgnoreCase("ja")){
list.remove(i);
System.out.println(name+" borttagen.");
saknas=false;
}
else if(answer.equalsIgnoreCase("nej")){
System.out.println("Du ville inte radera "+name+
". Du blir nu skickad tillbaka till menyn.");
saknas=false;
}else{
System.out.println("Du måste svara ja eller nej.");
System.out.println("Försök igen.");
saknas=false;
}
}
}
if(saknas){
System.out.println("Namnet finns ej.");
}
}
public void loadPlayers(LinkedList list){
try{
FileReader fr=new FileReader("spelare.txt");
BufferedReader inFil=new BufferedReader(fr);
String rad=inFil.readLine();
list.clear();
while(rad!=null){
StringTokenizer tokenizer=new StringTokenizer(rad, "\t");
String name=tokenizer.nextToken();
String moneyString=tokenizer.nextToken();
int money=Integer.parseInt(moneyString);
player temp=new player(name, money);
list.add(temp);
rad=inFil.readLine();
}
inFil.close();
System.out.println("Hämtningen av spelare lyckades.");
}
catch(IOException e){
System.out.println("Hämntingen av spelare misslyckades");
}
}
public void choosePlayer(LinkedList list){
boolean saknas=true;
if(list.size()!=0){
System.out.println("Vem vill du spela med?");
String name=stringreader.next();
for (int i=0; i<list.size() && saknas; i++){
player temp =(player)list.get(i) ;
if (temp.getName().equalsIgnoreCase(name)){
String myName=temp.getName();
int myMoney=temp.getMoney();
playerNumber=i;
System.out.println("Du spelar nu med "+ myName + " och har " + myMoney + ":-");
Game.play();
saknas = false;
}
}
if(saknas){
System.out.println( "Namnet, finns ej. " ) ;
}
}
}
public void write(LinkedList list){
for(int i=0; i<list.size(); i++){
player temp=(player)list.get(i);
int j=i+1;
System.out.println(j+". "+temp);
}
if(list.size()==0){
System.out.println("Inga spelare är registrerade.");
}
}
public void highscore(LinkedList list){
for(int i=0; i<list.size()-1; i++){
for(int j=i+1; j<list.size(); j++){
player temp =(player)list.get(i);
player temp2=(player)list.get(j);
if(temp.money<temp2.money){
int temp3=temp.money;
temp.money=temp2.money;
temp2.money=temp3;
}
}
}
}
}
//klassen game
package craps;
public class game {
dice d=new dice();
bet bets=new bet();
boolean playing=true;
public void play(){
while(playing){
bets.passLineBet();
System.out.println(d.sum);
}
}
}
//klassen dice
package craps;
import java.util.*;
public class dice {
Random dice1=new Random();
Random dice2=new Random();
int diceNumber1=dice1.nextInt(6)+1;
int diceNumber2=dice2.nextInt(6)+1;
public int sum;
public void roll(){
sum=diceNumber1+diceNumber2;
}
}
//klass bet
package craps;
import java.util.*;
public class bet {
LinkedList listOfPlayers=new LinkedList();
Scanner intreader=new Scanner(System.in);
playerlist pList=new playerlist();//när jag stänger av denna så kmr inte meddelandet upp
boolean money=true;
int bet1;
public void passLineBet(){
money=true;
while(money){
System.out.println("Du har ");
pList.moneyNow(listOfPlayers);
System.out.println(":-. Hur stort ska ditt passLineBet vara?");
bet1=intreader.nextInt();
/*if(bet1>now.playerNow.elementAt(1)()){
System.out.println("Du har inte så mycket pengar.");
}else{
money=false;
}*/
}
}
}
StackOverflowError betyder i regel att du har en funktion som anropar sig själv "oändligt" många gånger, eller åtminstone tills du får det felet. Jag tänker inte analysera din kod och lista ut var felet händer, men nu vet du vad du ska leta efter. Felmeddelandet bör säga vilken rad felet händer på, för övrigt...
ubg7325Medlem sedan dec. 20114 inlägg Jag ser ju vilken rad som e fel. Men förstår inte varför, varför skulle den anropa sig oändligt många gånger?