Fellipex 21 de nov. de 2012
Porque você não incrementa o num dentro do loop while, logo se num for menor que concessionarias.size(), será sempre infinito
para corrigir faça
while ( num < concessionarias .size ()) {
imprimir ( concessionarias ,num ) ;
num ++
}
Roger75 21 de nov. de 2012
oitathi:
Alguém pode me dizer pq tah dando looping infinito???
Obrigada
public static void imprimir(ArrayList<Concessionaria> concessionarias, int num){
System.out.println(concessionarias.get(num).getMarca());
if(concessionarias.get(num).getCarros().length > 0){
for(int i=0; i<concessionarias.get(num).getCarros().length;i++){
System.out.println(concessionarias.get(num).getCarros()[i].getModelo());
}
}
num++;
while(num< concessionarias.size()){
imprimir(concessionarias,num);
}
}
Neste trecho o num não está sendo incrementado dentro do while:
num++;
while(num< concessionarias.size()){
imprimir(concessionarias,num);
}
oitathi 21 de nov. de 2012
ah tah!
tipo, eu mudei pra incrementar dentro e fora…
mas agora ele repete o último nome duas vezes
public static void imprimir ( ArrayList < Concessionaria > concessionarias , int num ){
System . out . println ( concessionarias . get ( num ). getMarca ());
if ( concessionarias . get ( num ). getCarros (). length > 0 ){
for ( int i = 0 ; i < concessionarias . get ( num ). getCarros (). length ; i ++ ){
System . out . println ( concessionarias . get ( num ). getCarros () [ i ] . getModelo ());
}
}
num ++ ;
while ( num < concessionarias . size ()){
imprimir ( concessionarias , num ++ );
}
}
oitathi 21 de nov. de 2012
ainda não entendo…
se eu colocar assim:
public static void imprimir ( ArrayList < Concessionaria > concessionarias , int num ){
System . out . println ( concessionarias . get ( num ). getMarca ());
if ( concessionarias . get ( num ). getCarros (). length > 0 ){
for ( int i = 0 ; i < concessionarias . get ( num ). getCarros (). length ; i ++ ){
System . out . println ( concessionarias . get ( num ). getCarros () [ i ] . getModelo ());
}
}
while ( num < concessionarias . size ()){
imprimir ( concessionarias , ++ num );
}
}
ele imprime certo, porém dah Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
por favor me expliquem
Fellipex 21 de nov. de 2012
Se você fizer
Você está incrementando antes de entrar no método logo você nunca acessará a posição zero, pois ja está passando 1, e no fim das contas vai dar a exceção indexOutOBounds, que significa que você tentou acessar uma posição que não existe no array.
Porque você não faz o que eu postei?
while ( num < concessionarias .size ()) {
imprimir ( concessionarias ,num ) ;
num ++
}
Aqui você passa primeira 0, dai na proxima iteracao vai 1 e assim em diante, como deve ser. Acredito que ja vá resolver
Att
Fellipex 21 de nov. de 2012
Só complementando o erro
Se um array tem tamanho 3, logo ele não tem o índice 3, pois é 0,1,2. Ou seja a ultima posição é a 2 e não a 3.
Att
entanglement 21 de nov. de 2012
Não gosto de usar o operador de auto-incremento. É que ele é muito sujeito a chuvas e trovoadas. Eu faria isto, no seu lugar:
public static void imprimir ( ArrayList < Concessionaria > concessionarias , int num ){
System . out . println ( concessionarias . get ( num ). getMarca ());
if ( concessionarias . get ( num ). getCarros (). length > 0 ){
for ( int i = 0 ; i < concessionarias . get ( num ). getCarros (). length ; i ++ ){
System . out . println ( concessionarias . get ( num ). getCarros () [ i ] . getModelo ());
}
}
for ( int i = num ; i < concessionarias . size (); ++ i ) {
imprimir ( concessionarias , i );
}
}
A propósito, isso parece coisa de professor querendo ensinar recursão na marra. É isso?
oitathi 21 de nov. de 2012
Filipe, se eu usar o q vc diz, ele chama o metodo imprimir uma vez a mais…ou seja acaba imprimindo duas vezes o ultimo valor.
oitathi 21 de nov. de 2012
mudando um pouco, caso vc puderem me ajudar… como eu escrevo a mesma função em js?
seria?
function imprimir ( concessionarias , num ) {
print ( concessionarias [ num ] . marca ());
if ( concessionarias [ num ] . carros (). length > 0 ) {
for ( var i = 0 ; i < concessionarias [ num ] . carros (). length ; i ++ ) {
print ( concessionarias [ num ] . carros () [ i ] . modelo ());
}
}
while ( num < concessionarias . length ) {
imprimir ( concessionarias , ++ num );
}
}
é que sou perdida em java script, e precisava dessa função em js…
alguém poderia me indicar o caminho das pedras?