Capacidade String

8 respostas
V

Ola pessoal,

estou fazendo um programa que utiliza forca bruta para resolucao do problema. Pra isso, eu preciso gerar todas as palavras possiveis com as letras ‘a’ e ‘b’ ate um determinado tamanho n.
Mas meu programa esta dando um erro quando esse n eh grande.

Existe algum limite do tamanho de caracters de um String? Eu posso controlar isso??

Meu codigo é:

// Metodo que gera todas as palavras possiveis do alfabeto {a, b} de tamanho menor igual a n. public ArrayList<String> geraPalavras(int tamanho){ ArrayList<String> lista = new ArrayList<String>(); ArrayList<String> listaAux = new ArrayList<String>(); if (tamanho > 0){ lista = this.geraPalavras(tamanho - 1); if (lista.size() == 0){ lista.add("a"); lista.add("b"); } else { for (String e: lista){ if (e.length() == tamanho - 1){ listaAux.add(e.concat("a")); listaAux.add(e.concat("b")); } } for (String e: listaAux){ lista.add(e); } } return lista; } else return lista; }

E o erro foi o seguinte:

Exception in thread main java.lang.OutOfMemoryError: Java heap space

at java.util.Arrays.copyOf(Unknown Source)

at java.util.Arrays.copyOf(Unknown Source)

at java.util.ArrayList.ensureCapacity(Unknown Source)

at java.util.ArrayList.add(Unknown Source)

at Automato.geraPalavras(Automato.java:44)

at Automato.geraPalavras(Automato.java:37)

at Automato.geraPalavras(Automato.java:37)

at Automato.geraPalavras(Automato.java:37)

at Main.main(Main.java:56)

Se alguem souber me responder, agradeço.

Bjs

8 Respostas

M
Ironlynx

Veronica, o espaço destinado aos seus objetos em memória é insuficiente.Tente mudar os parâmetros da JVM.
Veja:
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

V

Obrigada Ironlynx, utilizei -Xms128m -Xmx512m para aumentar a memoria.

Soh uma coisinha… nao eh verorica, eh vanessa :smiley:

Bjsss

T

Vanessa, como vc modificou os parâmetros da JVM?

Obrigado,

Orlando

V

Tunim,

na epoca eu fiz isso no Eclipse. Eh so mudar as configuracoes, em Run As Dialog, na parte Arguments, opcao VM arguments.
Vc tbm pode fazer isso por linha de comando, na hora de executar o progrma.

Espero que ajude.

T

Valeu Vanessa, muito obrigado.

Marky.Vasconcelos

Se quiser uma solução que eu fiz tem nesse tópico
http://www.guj.com.br/posts/list/76356.java
no ultimo post eu coloquei o código completo e no main é só voce usar new CharInterval(‘a’,‘b’) que sua string será feita apenas com esses chars
tipo assim
começo
a>b>aa>ab>ba>bb>aaa>aab

é isso que voce precisa?

Marky.Vasconcelos

Eu só não criei um sistema pra colocar o maximo de chars mas já é um começo

Criado 4 de novembro de 2007
Ultima resposta 4 de out. de 2008
Respostas 8
Participantes 5