Exception in thread "main" java.lang.StackOverflowError

2 respostas
F

Pessoal,

Quando esse programa é executado começa a imprimir a sequencia de caracteres. Daí aparece o seguinte:

Exception in thread main java.lang.StackOverflowError

at sun.nio.cs.SingleByteEncoder.encodeArrayLoop(Unknown Source)

at sun.nio.cs.SingleByteEncoder.encodeLoop(Unknown Source)

at java.nio.charset.CharsetEncoder.encode(Unknown Source)

at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)

at sun.nio.cs.StreamEncoder.write(Unknown Source)

at java.io.OutputStreamWriter.write(Unknown Source)

at java.io.BufferedWriter.flushBuffer(Unknown Source)

at java.io.PrintStream.write(Unknown Source)

at java.io.PrintStream.print(Unknown Source)

at java.io.PrintStream.println(Unknown Source)

at estruturaDeDados.Recursividade.C(Recursividade.java:52)

at estruturaDeDados.Recursividade.C(Recursividade.java:56)

at estruturaDeDados.Recursividade.C(Recursividade.java:56)

at estruturaDeDados.Recursividade.C(Recursividade.java:56)

e depois volta a imprimir os caracteres.

Alguém pode ajudar?

O fonte segue abaixo:

public class Recursividade {
public static void main(String[] args) {

int a = 10;
	int resp;
	resp = A(a);
	
}

public static int A(int x){
	System.out.println('A');
	
	int aux;
	int z = 5;
	if( x > 4 ){
		aux = A(x - 3);
		if (x >= 10){
			return (B(x * 2)) + aux;
		}
		else{
			return (B((x * 2) + 1)) + aux;
		}
	}	
	else{
		return (z + C(x));
	}
}

public static int B(int w){
	System.out.println('B');
	
	int y = 9;
	if(w < 5){
		return (w + y);
	}
	else{
		return (2 + B(w - 3));
	}
}

public static int C(int k){
	System.out.println('C');
	
	int ret = 1;
	if( k > 2){
		return (1 + C(k + 1));
	}
	else{
		return ret;
	}
	
}

}

2 Respostas

W

cara poe seu codigo entre as tags [ code ] “codigo aqui” [ / code ]

claro so que sem os espaços…
eu não li o codigo ainda, to esperando vc formatar até porque e bom pra agente copiar e colar na nossa IDE.

mas pela exceção seu programa se perdeu dentro de um loop e começou a comer a memoria ate estourar o limite…

ViniGodoy

Se não souber usar a tag code, leia esse tópico:
http://www.guj.com.br/posts/list/50115.java

Esse erro ocorre tipicamente quando alguma condição de seu método recursivo é chamada infinitamente.
E pela cara da stack trace, é a da linha 56.

Também é uma boa vc colocar um comentário nas linhas do seu stacktrace. Por exemplo, só olhando aqui o seu código, eu não conseguiria dizer qual é a linha 56.

Criado 16 de março de 2008
Ultima resposta 17 de mar. de 2008
Respostas 2
Participantes 3