| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/10/2011 16:31:42
|
TheJayyBe
Entusiasta Java
![[Avatar]](/images/avatar/2d6aa148140dd6786c1f83171aefc33d.jpg)
Membro desde: 10/07/2010 19:29:56
Mensagens: 15
Offline
|
Olá, estou criando um programa que recebe dados de um txt, e o transporta para um array de Strings em tempo real, ou seja, de período em período o arquivo é modificado. O texto do arquivo recebe ou perde linhas, por isso escolhi o ArrayList, por necessitar de um Array dinâmico. (Array.add(String x) )
Estou recebendo o seguinte erro:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.set(Unknown Source)
at pacote.Viewer.main(Viewer.java:80)
Meu código não faz o que pretende. Eis as partes que interessam do mesmo:
Conta variáveis por linha: (Linhas terminadas por '$', variáveis separadas por '#')
O que estou fazendo errado em relação a implantação desse texto no arrayList dentro do arrayList, esse último código fiz procurando em toneladas de fóruns.
This message was edited 4 times. Last update was at 31/10/2011 00:15:24
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2011 07:53:44
|
erato690
Debugger
Membro desde: 22/05/2009 15:55:38
Mensagens: 74
Offline
|
Amigo seu erro no codigo abaixo:
você esta dando um get numa lista que esta vazia
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2011 08:01:40
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Você sabe usar Map? O seu problema parece ser mais facilmente resolvível por um Map<String, List<String>> que um ArrayList<ArrayList<String>>.
O problema que você deve estar encontrando é que arrays e ArrayLists começam na posição 0 e, conforme lhe disseram, você está tentando acessar uma lista vazia. Ou seja, você provavelmente está com um problema no seu contador de variáveis.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2011 18:10:12
|
TheJayyBe
Entusiasta Java
![[Avatar]](/images/avatar/2d6aa148140dd6786c1f83171aefc33d.jpg)
Membro desde: 10/07/2010 19:29:56
Mensagens: 15
Offline
|
erato690 wrote:
Amigo seu erro no codigo abaixo:
você esta dando um get numa lista que esta vazia
Contador de variáveis está ok! Ele está contando as 6 variáveis e implantando tudo.
É correta esta sintaxe?
listas.get(coluna).set(numLinha, parcial);
O que quero é dar um add em um arraylist dentro de um arraylist.
Ex:
coluna 1,linha 1
coluna 2,linha 1
coluna 1,linha 2
coluna 2,linha 2
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2011 18:11:40
|
TheJayyBe
Entusiasta Java
![[Avatar]](/images/avatar/2d6aa148140dd6786c1f83171aefc33d.jpg)
Membro desde: 10/07/2010 19:29:56
Mensagens: 15
Offline
|
O que quero fazer:
O arquivo será modificado por um aplicativo externo (o programa recriar a lista de segundo a segundo).
Porque usei ArrayList?
Porque são vetores dinâmicos, não possuo a contagem de linhas do arquivo portanto posso usar add até ele achar uma linha sem informação.
Porque usei ArrayLists dentro de outra lista?
Porque não existe modo de atribuir nome de variáveis de modo automático, portanto uso o número da posição do ArrayList dentro do ArrayList. Explicando melhor:
Não posso fazê-lo criar n listas de acordo com os número de váriaveis ('#'s +1):
1#X0#Y0#Z0#SX1#SY1$
contagemVariaveis =1; //Pois já começo com uma variável.
for (i=0;char[i]==$;i++){
if (char[i]=='#) contagemVariaveis++;
}
/*
for (i=0;i<contagemVariaveis;i++){
ArrayList i = new ArraylLst(); <<- (Não existe)
}
*/
No entanto posso fazer:
ArrayList<ArrayList<String>> listas = new ArrayList<ArrayList<String>>();
for (i=0;i<contagemVariaveis;i++){
listas.add(i,new ArrayList<String>());
}
This message was edited 1 time. Last update was at 15/10/2011 18:13:10
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2011 20:49:00
|
marcobiscaro2112
JWizard
Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline
|
Uma pergunta: os atributos de cada linhas são sempre os mesmos 5 (PosX, PosY, PosZ, scaleX e scaleY)?
Se sim, ao invés de usar um ArrayList de ArrayList, crie uma classe com as propriedades que você precisa e use um ArrayList dessa classe.
Assim, no código de leitura do arquivo você faria um laço em todas as linhas e, para cada linha, quebraria o texto em todos os caracteres '#' (use o método split da classe String para isso). Depois, basta definir os atributos da classe a partir desses valores.
Outra pergunta: os números são sempre sequenciais no arquivo (começam do 1 e vão até o total de linhas)? Se sim, não me parece fazer sentido ter essa informação no arquivo, concorda? Para saber qual número é, basta verificar em qual linha está (ou, no caso do seu programa, em qual posição do ArrayList está) o elemento.
|
Marco Biscaro.
Seja livre!
Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?
Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2011 22:29:48
|
TheJayyBe
Entusiasta Java
![[Avatar]](/images/avatar/2d6aa148140dd6786c1f83171aefc33d.jpg)
Membro desde: 10/07/2010 19:29:56
Mensagens: 15
Offline
|
marcobiscaro2112 wrote:Uma pergunta: os atributos de cada linhas são sempre os mesmos 5 (PosX, PosY, PosZ, scaleX e scaleY)?
Se sim, ao invés de usar um ArrayList de ArrayList, crie uma classe com as propriedades que você precisa e use um ArrayList dessa classe.
Assim, no código de leitura do arquivo você faria um laço em todas as linhas e, para cada linha, quebraria o texto em todos os caracteres '#' (use o método split da classe String para isso). Depois, basta definir os atributos da classe a partir desses valores.
Outra pergunta: os números são sempre sequenciais no arquivo (começam do 1 e vão até o total de linhas)? Se sim, não me parece fazer sentido ter essa informação no arquivo, concorda? Para saber qual número é, basta verificar em qual linha está (ou, no caso do seu programa, em qual posição do ArrayList está) o elemento.
O número na primeira linha é essencial para mim porque tenho que saber se o programa que está editando esse arquivo está fazendo o papel dele corretamente ou está com problemas em implantar alguma linha. Sobre o split eu sei fazer, não sei se é do modo que você está pensando, veja:
...
...
Meu problema é realmente a sintaxe de implementar dentro do array:
O mais próximo que cheguei foi isso, e acho que aí está o erro não?
listas.get(coluna).set(numLinha, parcial);
Tenho que fazer desta forma: Implante dentro do ArrayList listas no ArrayList que se encontra nele de número 1 ou 2 ou 3 (o número que eu disser) , na posição x o String parcial.
Sobre isso de fazer uma classe com os atributos e instanciá-la, poderia dar um exemplo de como ficaria a implantação? Não compreendi muito bem e se não restar alternativa, o farei.
This message was edited 1 time. Last update was at 15/10/2011 22:30:23
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2011 22:33:30
|
TheJayyBe
Entusiasta Java
![[Avatar]](/images/avatar/2d6aa148140dd6786c1f83171aefc33d.jpg)
Membro desde: 10/07/2010 19:29:56
Mensagens: 15
Offline
|
Para ficar mais claro, só preciso da correta sintaxe para setar um valor de arraylist dentro de outro:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2011 18:39:28
|
marcobiscaro2112
JWizard
Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline
|
Quando falei sobre split, me referi a um método que já existe na classe String.
Crie um ArrayList de ArrayList. Depois, para cada linha do arquivo, crie um ArrayList de String (que representa cada linha lida) e coloque os elementos da linha nesse ArrayList. Por fim, adicione o ArrayList linha no ArrayList listas. Seria algo como:
|
Marco Biscaro.
Seja livre!
Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?
Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2011 00:14:56
|
TheJayyBe
Entusiasta Java
![[Avatar]](/images/avatar/2d6aa148140dd6786c1f83171aefc33d.jpg)
Membro desde: 10/07/2010 19:29:56
Mensagens: 15
Offline
|
Resolvido galera, obrigado a quem tentou ajudar mas achei a solução perfeita ao meu problema.
A solução:
http://www.portugal-a-programar.org/forum/index.php/topic,59995.new.html#new
|
|
|
 |
|
|