Exercício+Caelum+Fors Encadeados

34 respostas
romim

Bom dia pessoal, estou com dúvida em fazer o exercício abaixo e gostaria de uma orientação, não quero que me deem a resposta, e sim formas de como eu possa chegar até a resposta.. já bati muito a cabeça e nada até agora.

Exercício da Apostila de Java Básico da Caelum.

Imprima a seguinte tabela usando for encadeados:
1
2 4
3 6 9
4 8 12 16
n n*2 n*3 ... n*n

o que eu já fiz?... muitas coisas!, mas só chego a lugar algum, acredito esteja faltando um cálculo, e também não estou conseguindo enxergar esta quebra de linha!

[/code]
public class Encadeado {
public static void main (String[] args){

int tamanho = 5;
for (int a=1; a<=tamanho; a++){
for (int b=1; b<=tamanho; b++){

System.out.print(b + " ");
}
System.out.println(a);
}
}
}
[code]

Aguardo a ajuda de vocês e eu não pesquisei no google, porque pode ser que eu encontre a resposta, e esse não é o meu objetivo, estou estudando para aprender!

34 Respostas

Rodrigo_Sasaki

Dica 1: Inverta suas tags [ code][/code]
Dica 2: o For interno não pode ir até tamanho como o externo, tem que ser um valor dinâmico.

romim
public class Encadeado {
	public static void main (String[] args){
		
		int tamanho = 5;
		for (int a=1; a<=tamanho; a++){
			for (int b=1; b<= ? ; b++){
				
				System.out.print(b + " ");
			}
			System.out.println(a);
		}
	}
}

Certo, você pediu para eu não usar o tamanho no segundo for, mas para eu colocar uma outra coisa, ou tem que ser um numeral, ou criar uma variável, não é isso?

Rodrigo_Sasaki

Sim, mas você tem que ver quantas vezes você quer que aquele processamento ocorra.

Pelo seu enunciado, na primeira vez, tem que ocorrer 1x, na segunda vez 2x.

Entende onde quero chegar?

romim
digaoneves:
Sim, mas você tem que ver quantas vezes você quer que aquele processamento ocorra.

Pelo seu enunciado, na primeira vez, tem que ocorrer 1x, na segunda vez 2x.

Entende onde quero chegar?

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=1; a++){
			for (int b=1; b<=2 ; b++){
				for (int c=1; c<=3 ; c++){
					System.out.println(c);
				}
				System.out.print(b + " ");
			}
			System.out.print(a);
		}
	}
}

o que você disse seria da forma acima?

Rodrigo_Sasaki

Não.

você precisa de um valor que vai incrementar de acordo com o número de impressões que você tem na tela.

quando for 1, imprime só uma vez. 11.
quando for 2, imprime duas vezes. 2
1 e 2*2.

Você precisa usar uma variável que é incrementada dessa maneira para controlar o limite do seu for interior.

Dica: Você ja tem essa variável, olhe bem e a encontre.

EDIT: outra dica, você só vai usar 2 fors.

romim

digaoneves:
Não.

você precisa de um valor que vai incrementar de acordo com o número de impressões que você tem na tela.

quando for 1, imprime só uma vez. 11.
quando for 2, imprime duas vezes. 2
1 e 2*2.

Você precisa usar uma variável que é incrementada dessa maneira para controlar o limite do seu for interior.

Dica: Você ja tem essa variável, olhe bem e a encontre.

EDIT: outra dica, você só vai usar 2 fors.

Além dessas dicas, tem mais alguma? rsrsr a variável para incrementar que você disse é a letra A e B?

Rodrigo_Sasaki

ta bom vai, você que pediu, rs.

A variável de controle do seu for interno tem que ser a atual do for externo, ou seja, a variável a

romim

digaoneves:
ta bom vai, você que pediu, rs.

A variável de controle do seu for interno tem que ser a atual do for externo, ou seja, a variável a

Deixa eu te perguntar, este mesmo processo que você está me orientando na questão da variável…, obedece a quebra de linha ou (a quebra de linha) será o ultimo passo?

Rodrigo_Sasaki

a quebra de linha não pode ocorrer no seu for interior, senão o seu output não vai ser igual ao especificado, você precisa encontrar uma maneira de fazer ele quebrar a linha uma só vez, após imprimir toda a informação necessária naquela linha.

Estou sendo vago e dando dicas porque não quero te dar a resposta pronta, já que você disse que quer aprender.

romim
digaoneves:
a quebra de linha não pode ocorrer no seu for interior, senão o seu output não vai ser igual ao especificado, você precisa encontrar uma maneira de fazer ele quebrar a linha uma só vez, após imprimir toda a informação necessária naquela linha.

Estou sendo vago e dando dicas porque não quero te dar a resposta pronta, já que você disse que quer aprender.

Eu não estou identificando meu erro... tem mais algum palpite ou dica do que está feito, tipo: é por aí mesmo! rsrsrs

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=5; a++){
			for (int b=a;b<=a*a; b+=a, a=b*a){
				System.out.print(b + " ");
			}
			System.out.print(a);
		}
	}
}
Rodrigo_Sasaki

a sua iteração tem que ser do jeito que eu falei acima. Agora os cálculos (multiplicações) tem que ocorrer dentro do bloco de código. não na declaração do for.

romim
digaoneves:
a sua iteração tem que ser do jeito que eu falei acima. Agora os cálculos (multiplicações) tem que ocorrer dentro do bloco de código. não na declaração do for.

Cara, estou quase lá.... rsrsr
Adicionei (ln) na saida da variável (a) e retirei a multiplicação no final do for interno.

mas no final de cada linha está repetindo a primeira coluna.

tem alguma dica?

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=a;b<=a*a; b+=a){
				System.out.print(b + " ");
			}
			System.out.println(a);
		}
	}
}
S
romim:
digaoneves:
a sua iteração tem que ser do jeito que eu falei acima. Agora os cálculos (multiplicações) tem que ocorrer dentro do bloco de código. não na declaração do for.

Cara, estou quase lá.... rsrsr
Adicionei (ln) na saida da variável (a) e retirei a multiplicação no final do for interno.

mas no final de cada linha está repetindo a primeira coluna.

tem alguma dica?

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=a;b<=a*a; b+=a){
				System.out.print(b + " ");
			}
			System.out.println(a);
		}
	}
}

O seu segundo for está errado e o que você está imprimindo dentro do for de dentro está errado. Tambem nao existe motivo para imprimir o a no for de fora.

Rodrigo_Sasaki
Seu código tem que ter essa estrutura:
public class Encadeado {
    public static void main (String[] args){
		
        for (int a=1; a<=4; a++){
            for (int b=1;b<=a; b++){//Tire as operações de multiplicação daqui.
                //Se for somar, multiplicar e qualquer outra coisa, faça aqui
            }
            System.out.println();
        }
    }
}
SpiderX
romim:
digaoneves:
a sua iteração tem que ser do jeito que eu falei acima. Agora os cálculos (multiplicações) tem que ocorrer dentro do bloco de código. não na declaração do for.

Cara, estou quase lá.... rsrsr
Adicionei (ln) na saida da variável (a) e retirei a multiplicação no final do for interno.

mas no final de cada linha está repetindo a primeira coluna.

tem alguma dica?

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=a;b<=a*a; b+=a){
				System.out.print(b + " ");
			}
			System.out.println(a);
		}
	}
}

Olá,

Como o digaoneves mencionou, você não pode fazer, ou melhor, não é aconselhavel fazer as multiplicações dentro da declaração do FOR, faça isso dentro dele !

Abraço.

romim
digaoneves:
Seu código tem que ter essa estrutura:
public class Encadeado {
    public static void main (String[] args){
		
        for (int a=1; a<=4; a++){
            for (int b=1;b<=a; b++){//Tire as operações de multiplicação daqui.
                //Se for somar, multiplicar e qualquer outra coisa, faça aqui
            }
            System.out.println();
        }
    }
}

Se eu tirar as operações do for, eu posso incluir a condicional if? pois com os calculos dentro do for interno e a retirada da variável (a) do System externo, o resultado bate!
Porque tenho que tirar as operações de dentro do for, é errado? não é legal calcular dentro do for? fiz um outro exercícios onde calculei dentro o resultado foi ok!

Rodrigo_Sasaki

O código compila, e funciona, então pelo ponto de vista da JVM você pode fazer sim.

Porém eu não aconselho, seu código fica difícil de ler, e de manter. Caso você precise fazer alguma alteração, vai ser muito mais complicado alterar o seu for, do que o bloco de código dentro dele.

romim
SpiderX:
romim:
digaoneves:
a sua iteração tem que ser do jeito que eu falei acima. Agora os cálculos (multiplicações) tem que ocorrer dentro do bloco de código. não na declaração do for.

Cara, estou quase lá.... rsrsr
Adicionei (ln) na saida da variável (a) e retirei a multiplicação no final do for interno.

mas no final de cada linha está repetindo a primeira coluna.

tem alguma dica?

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=a;b<=a*a; b+=a){
				System.out.print(b + " ");
			}
			System.out.println(a);
		}
	}
}

Olá,

Como o digaoneves mencionou, você não pode fazer, ou melhor, não é aconselhavel fazer as multiplicações dentro da declaração do FOR, faça isso dentro dele !

Abraço.

Entendi... não é aconselhavel, né?...

Valeu!

SpiderX
romim:
digaoneves:
Seu código tem que ter essa estrutura:
public class Encadeado {
    public static void main (String[] args){
		
        for (int a=1; a<=4; a++){
            for (int b=1;b<=a; b++){//Tire as operações de multiplicação daqui.
                //Se for somar, multiplicar e qualquer outra coisa, faça aqui
            }
            System.out.println();
        }
    }
}

Se eu tirar as operações do for, eu posso incluir a condicional if? pois com os calculos dentro do for interno e a retirada da variável (a) do System externo, o resultado bate!
Porque tenho que tirar as operações de dentro do for, é errado? não é legal calcular dentro do for? fiz um outro exercícios onde calculei dentro o resultado foi ok!

Fazer as contas dentro do for não te da um controle melhor sobre a aplicação, sem falar que o codigo fica mais complexo.

Vc pode usar IF sim para fazer suas contas, mas como você esta seguindo uma apostila, no enunciado do problema ele permite que vocẽ utilize qualquer forma para resolver ou apenas com FOR ?

abraço.

romim

digaoneves:
O código compila, e funciona, então pelo ponto de vista da JVM você pode fazer sim.

Porém eu não aconselho, seu código fica difícil de ler, e de manter. Caso você precise fazer alguma alteração, vai ser muito mais complicado alterar o seu for, do que o bloco de código dentro dele.

Então blz… já stou levando para fora do for… se possível conto com a sua ajuda e um muito obrigado pelas orientações por enquanto!

Em quanto tempo você acha que é o tempo ideal para uma pessoa ficar bom em java? Eu sou meio doido e larguei tudo para aprender esta linguagem por oportunidade de um emprego… e estou estudando e com muita ansiedade… você acha que é possível em um tempo curto eu ter uma base?
O que você me aconselha, ja tenho quase uns 15 dias de estudo! Estou estudando Orientação a objeto mas tiro dias intrcalados para resolver algorítmos.

romim
SpiderX:
romim:
digaoneves:
Seu código tem que ter essa estrutura:
public class Encadeado {
    public static void main (String[] args){
		
        for (int a=1; a<=4; a++){
            for (int b=1;b<=a; b++){//Tire as operações de multiplicação daqui.
                //Se for somar, multiplicar e qualquer outra coisa, faça aqui
            }
            System.out.println();
        }
    }
}

Se eu tirar as operações do for, eu posso incluir a condicional if? pois com os calculos dentro do for interno e a retirada da variável (a) do System externo, o resultado bate!
Porque tenho que tirar as operações de dentro do for, é errado? não é legal calcular dentro do for? fiz um outro exercícios onde calculei dentro o resultado foi ok!

Pelo que eu entendi.. é só pelo for... Então nesse caso é calculo direto, né?

Fazer as contas dentro do for não te da um controle melhor sobre a aplicação, sem falar que o codigo fica mais complexo.

Vc pode usar IF sim para fazer suas contas, mas como você esta seguindo uma apostila, no enunciado do problema ele permite que vocẽ utilize qualquer forma para resolver ou apenas com FOR ?

abraço.

Rodrigo_Sasaki

bom, eu fiz esse exercício aí que você ta fazendo hehee. comecei a estudar por essa apostila.

Agora tempo de aprendizado é difícil medir, depende muito da pessoa, as vezes a pessoa tem facilidade, as vezes não.
E depende muito de disciplina, não adianta querer aprender assuntos avançados sem saber o básico. Um passo de cada vez.

Só não pare de estudar que você vai chegar la.

romim

digaoneves:
bom, eu fiz esse exercício aí que você ta fazendo hehee. comecei a estudar por essa apostila.

Agora tempo de aprendizado é difícil medir, depende muito da pessoa, as vezes a pessoa tem facilidade, as vezes não.
E depende muito de disciplina, não adianta querer aprender assuntos avançados sem saber o básico. Um passo de cada vez.

Só não pare de estudar que você vai chegar la.

Valeu pela dica cara, na realidade eu não sei s estou pulando passo… pois apesar de teoricamente, eu “entender” o que devo fazer com base nos exercícios que venho praticando, exceto um ou outro que me provoca a dúvida que tive como estou tendo nesse… eu comecei Orientação a Objtos, mas parece que tenho que tentar resolver mais algoritmos para poder ir para frente, sabe?

Mas voltando ao exercício, até o SpiderX, que também está me dando uma força, orientou que pelo devo resolver usando for, então, devo nesse caso desmembrar os calculos abaixo sem utilizar condicional, é isso?

SpiderX

romim:
digaoneves:
bom, eu fiz esse exercício aí que você ta fazendo hehee. comecei a estudar por essa apostila.

Agora tempo de aprendizado é difícil medir, depende muito da pessoa, as vezes a pessoa tem facilidade, as vezes não.
E depende muito de disciplina, não adianta querer aprender assuntos avançados sem saber o básico. Um passo de cada vez.

Só não pare de estudar que você vai chegar la.

Valeu pela dica cara, na realidade eu não sei s estou pulando passo… pois apesar de teoricamente, eu “entender” o que devo fazer com base nos exercícios que venho praticando, exceto um ou outro que me provoca a dúvida que tive como estou tendo nesse… eu comecei Orientação a Objtos, mas parece que tenho que tentar resolver mais algoritmos para poder ir para frente, sabe?

Mas voltando ao exercício, até o SpiderX, que também está me dando uma força, orientou que pelo devo resolver usando for, então, devo nesse caso desmembrar os calculos abaixo sem utilizar condicional, é isso?

Eu disse que depende do que a apostila esta lhe pedindo, pois tem muitos exercicios que pedem para você fazer determinada tarefa sem usar IF, ou somente usando Case, é como se fosse desafios entende ? no meu curso a professora usava bastante isso.

mas se o exercicio não impos nenhum criterio para ser resolvido, eu iria utilizar o IF sem duvidas.

abraço.

Rodrigo_Sasaki

Vendo pelo enunciado e pelo output requerido, eu não utilizaria nenhum if, somente o for encadeado.

SpiderX

Viu ? essa é a verdadeira prova de que existem logicas diferentes, não existe uma certa, simplesmente existe a que tem um processo mais rapido e um codigo mais legivel !

No caso o modo do Digão iria funcionar da mesma forma que o que eu falei, mas com mais tempo de resposta em um codigo mais simples.

Abraço.

romim

SpiderX:
romim:
digaoneves:
bom, eu fiz esse exercício aí que você ta fazendo hehee. comecei a estudar por essa apostila.

Agora tempo de aprendizado é difícil medir, depende muito da pessoa, as vezes a pessoa tem facilidade, as vezes não.
E depende muito de disciplina, não adianta querer aprender assuntos avançados sem saber o básico. Um passo de cada vez.

Só não pare de estudar que você vai chegar la.

Valeu pela dica cara, na realidade eu não sei s estou pulando passo… pois apesar de teoricamente, eu “entender” o que devo fazer com base nos exercícios que venho praticando, exceto um ou outro que me provoca a dúvida que tive como estou tendo nesse… eu comecei Orientação a Objtos, mas parece que tenho que tentar resolver mais algoritmos para poder ir para frente, sabe?

Mas voltando ao exercício, até o SpiderX, que também está me dando uma força, orientou que pelo devo resolver usando for, então, devo nesse caso desmembrar os calculos abaixo sem utilizar condicional, é isso?

Eu disse que depende do que a apostila esta lhe pedindo, pois tem muitos exercicios que pedem para você fazer determinada tarefa sem usar IF, ou somente usando Case, é como se fosse desafios entende ? no meu curso a professora usava bastante isso.

mas se o exercicio não impos nenhum criterio para ser resolvido, eu iria utilizar o IF sem duvidas.

abraço.

Entendi o que você disse…

romim
digaoneves:
Vendo pelo enunciado e pelo output requerido, eu não utilizaria nenhum if, somente o for encadeado.
public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=a;b<=a; b++){
				b*=b;
				System.out.print(b + " ");
			}
			System.out.println();
		}
	}
}

Você deve está pensando... este cara ainda tem chão...rsrsrs e eu realemente estou sabendo disso...rsrsr infizmente... mas olha... o resultado dos cálculos não estão errados, só não estão saindo como devem saír...
Alguma dica, ou... (Rômulo, pense mais!)...

SpiderX
romim:

Você deve está pensando... este cara ainda tem chão...rsrsrs e eu realemente estou sabendo disso...rsrsr infizmente... mas olha... o resultado dos cálculos não estão errados, só não estão saindo como devem saír...
Alguma dica, ou... (Rômulo, pense mais!)...

Olhe, vai algumas dicas:

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
		
             [  	for (int b=a;b<=a; b++){   //aqui vc esta falando que o b sempre vai ser o valor de a, vc deve fazer o b percorrer  posições igual ao a, não sei se deu pra vc entender, mas vai como deveria ser !

			for (int b=1;b<=a;b++){

	                 b*=b; //  - Aqui vc precisa de uma outra variavel, uma auxiliar, para mostrar sua alteração, não faça isso na variavel Contador (b) por exemplo.

                         int aux =  ?     // aqui vc coloca a conta que deve ser feita, não vou falar qual é, pra vc pensar qual seria, mais é bem simples !

			System.out.print(aux); // aqui é so chamar o aux
			}
			System.out.println();
		}
	}


}

Siga os passos, a conta vc vai conseguir facil é so anallisar as alterações que eu fiz que vc descobre, se ainda tiver duvida, tento explicar melhor !

Abraço amigo.

romim
SpiderX:
romim:

Você deve está pensando... este cara ainda tem chão...rsrsrs e eu realemente estou sabendo disso...rsrsr infizmente... mas olha... o resultado dos cálculos não estão errados, só não estão saindo como devem saír...
Alguma dica, ou... (Rômulo, pense mais!)...

Olhe, vai algumas dicas:

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
		
             [  	for (int b=a;b<=a; b++){   //aqui vc esta falando que o b sempre vai ser o valor de a, vc deve fazer o b percorrer  posições igual ao a, não sei se deu pra vc entender, mas vai como deveria ser !

			for (int b=1;b<=a;b++){

	                 b*=b; //  - Aqui vc precisa de uma outra variavel, uma auxiliar, para mostrar sua alteração, não faça isso na variavel Contador (b) por exemplo.

                         int aux =  ?     // aqui vc coloca a conta que deve ser feita, não vou falar qual é, pra vc pensar qual seria, mais é bem simples !

			System.out.print(aux); // aqui é so chamar o aux
			}
			System.out.println();
		}
	}


}

Siga os passos, a conta vc vai conseguir facil é so anallisar as alterações que eu fiz que vc descobre, se ainda tiver duvida, tento explicar melhor !

Abraço amigo.

Não vou mentir... o exercício está mastigado... mas na ralidade esta variável aux, está faltando no calculo é só fazer ele multiplicar por 1, por 2, por 3... e tento de toda a forma e não dá.

Rodrigo_Sasaki

não tem como dar mais dicas sem te passar o código pronto, cara. Se você quiser a gente passa, mas aí fica a seu critério.

romim
digaoneves:
não tem como dar mais dicas sem te passar o código pronto, cara. Se você quiser a gente passa, mas aí fica a seu critério.

Galera que estão iniciando... não desistem... meu exercício está resolvido, depois de bater tando a cabeça com uma coisa que estava tão simples... mas não me dá vergonha não .... é errando que se aprende...

vejam:

Para quem acompanhou desde o inicio, eu apenas dei um valor para b, que no caso foi o numeral 1 e no System.out.print, multipliquei a*b.

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=1;b<=a; b++){
				System.out.print(a*b + " ");
			}
			System.out.println();
		}
	}
}

Valeu para os que me ajudaram, e eu continuarei resolvendo mais exercícios... rsrsrsr

SpiderX
romim:
digaoneves:
não tem como dar mais dicas sem te passar o código pronto, cara. Se você quiser a gente passa, mas aí fica a seu critério.

Galera que estão iniciando... não desistem... meu exercício está resolvido, depois de bater tando a cabeça com uma coisa que estava tão simples... mas não me dá vergonha não .... é errando que se aprende...

vejam:

Para quem acompanhou desde o inicio, eu apenas dei um valor para b, que no caso foi o numeral 1 e no System.out.print, multipliquei a*b.

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=1;b<=a; b++){
				System.out.print(a*b + " ");
			}
			System.out.println();
		}
	}
}

Valeu para os que me ajudaram, e eu continuarei resolvendo mais exercícios... rsrsrsr

Parabens ! muito bom mesmo,mas não porque vc conseguil, mas porque vc não desistiu, continue assim amigo e irá longe.

Abraço.

Rodrigo_Sasaki
SpiderX:
romim:
digaoneves:
não tem como dar mais dicas sem te passar o código pronto, cara. Se você quiser a gente passa, mas aí fica a seu critério.

Galera que estão iniciando... não desistem... meu exercício está resolvido, depois de bater tando a cabeça com uma coisa que estava tão simples... mas não me dá vergonha não .... é errando que se aprende...

vejam:

Para quem acompanhou desde o inicio, eu apenas dei um valor para b, que no caso foi o numeral 1 e no System.out.print, multipliquei a*b.

public class Encadeado {
	public static void main (String[] args){
		
		for (int a=1; a<=4; a++){
			for (int b=1;b<=a; b++){
				System.out.print(a*b + " ");
			}
			System.out.println();
		}
	}
}

Valeu para os que me ajudaram, e eu continuarei resolvendo mais exercícios... rsrsrsr

Parabens ! muito bom mesmo,mas não porque vc conseguil, mas porque vc não desistiu, continue assim amigo e irá longe.

Abraço.


++

Parabéns, cara :)

Criado 14 de maio de 2012
Ultima resposta 14 de mai. de 2012
Respostas 34
Participantes 4