Exercicio

67 respostas
L

Pessoal, eu estou tentando resolver um exercicio de uma apostila de java que diz"1) Imprima todos os números de 150 a 300." eu fiz do seguinte modo:
public class exe{

public static void main(String[] args)

{

int i = 150;
 while (i<300){
 System.out.println(i);
 i=i++;

 }

}

}

mas o programa só mostra 150 infinitas vezes.Quando eu uso o i=i + 1 no lugar de i = i ++ ele funciona corretamente.
mas i + 1 não é igual a i++?

67 Respostas

Marcosta

Preste atenção amigo.

i = i + 1 é diferente de i = i++. Mas i = i+1 é igual a i++.
ou seja, remova esse “i =” que você colocou antes do i++ e seu programa funcionara corretamente.

Mas esta é uma utilização simples do i++. Depois de um tempo você vai utilizar ele de outras maneiras. Tanto ele quanto o ++i.

Obs: Minha primeira postagem no forum do GUJ. Mals se falei alguma bobagem. XD

L

Realmente, foi falta de atenção minha.Eu sou muito desatento e essa coisa de programação necessita da maxima atenção possivel, obrigrado. :smiley:

ViniGodoy

Agora tente reescrever usando o comando “for”. O programa dentro do main deve ter apenas 3 linhas de código, contando o } do for.

L

Estou tentando fazer a soma dos numeros dessa forma:

int i = 1;
       while ( i<=150){
   System.out.println(i);
        i = i + i; }

Mas não está funcionando. O que está errado?

ViniGodoy

O que está errado é que vc não está somando os números. :slight_smile:

Você deve acumular os valores de “i” numa outra variável.

Ou então, usar a soma dos termos de uma P.A., e nem sequer fazer com while.

L

Então deveria ser assim:

int i = 1;
       int somaparcial = 0;

       while ( i<=150){
   System.out.println(somaparcial);
   i = i + 1;
   somaparcial = somaparcial + i;

?

ViniGodoy

Sim, mas vc pode exibir a soma só após o while. Outra coisa, quando postar códigos, use a tag code. Se não sabe como, leia:

L

Desculpe mas eu não entendi.Como exibir a soma após o while? No caso está correto?

nel
System.out.println("Soma: " + somaParcial);

Foi isso que o Viny quis dizer, tens uma variavél fora do escopo do while, dentro do escopo você faz todas as somas necessárias, quando terminar o laço de repetição, encerra-se e em seguida apresenta o resultado como demonstro acima.

Abraços.

douglaskd

você esta com dúvidas de lógica…

bem:

int i = 150; //i começa valendo 150 while ( i<=300){ //enquanto i for menor que 300 faça: System.out.println(i); //imprimir i i = i + 1; // i vale seu valor +1, isso é um incremento }

tese de mesa

150<=300 ? sim
imprimir na tela: 150
i = 150+1

151 <=300 ? sim
imprimir na tela: 151
i = 151+1

152 <= 300? sim
imprimir na tela: 152
i = 152+1

…//depois de 150 laços

301 <= 300? não
não entrou no while…
saindo do programa…

L

Voçê fala pra eu escrever desta forma ?:

[u]  while ( i<=10){
         
               i = i + 1;
                   somaparcial = somaparcial + i;      
               
        }  
            System.out.println ( somaparcial );[/u]

imprimindo a mensagem fora do escopo do while?
Porque na apostila que eu tenho ele da um exemplo imprimindo a mensagem no mesmo escopo do while.

OBS:Sobre o tag code seria pra eu fazer dessa forma?
Agradeço a atenção!

L

ops, eu esqueci de fechar a chave (ela seria antes de imprimir a mensagem).

nel

luck008:
Voçê fala pra eu escrever desta forma ?:

[u]  while ( i<=10){
         
               i = i + 1;
                   somaparcial = somaparcial + i;      
               
        }  
            System.out.println ( somaparcial );[/u]

imprimindo a mensagem fora do escopo do while?
Porque na apostila que eu tenho ele da um exemplo imprimindo a mensagem no mesmo escopo do while.

OBS:Sobre o tag code seria pra eu fazer dessa forma?
Agradeço a atenção!

Simples, adicione o System.out.println() dentro do escopo do seu while.
Sobre a tag code, quando você responde tem um “retangulo” no inicio com a palavra ‘code’. Clica uma vez nela, coloque seu código e depois novamente para fechar a tag. Veja o link que o Viny te passou, lá explica isso amigo :slight_smile:

snowblacksoul

Cara é isso aqui que está querendo fazer?!?!?!?!

public class Produto {

	public static void main(String[]args){
		
		int i = 150;
		
		while(i<=300){
			System.out.println(i);
			i++;
		}
	}
}

faça o teste!!!

Abraços!

L

eu ainda estou tentando fazer a soma dos numeros sem usar a formula de P.A dessa forma:
aqui como exemplo de 1 a 10:

int i = 1; 

         int somaparcial = 0; 

               while ( i<=10){ 

                    System.out.println(somaparcial); 

                          i = i + 1;

                          somaparcial = somaparcial + i;

só que não ta dando certo.

nel

luck008:
eu ainda estou tentando fazer a soma dos numeros sem usar a formula de P.A dessa forma:
aqui como exemplo de 1 a 10:

int i = 1; 

         int somaparcial = 0; 

               while ( i<=10){ 

                    System.out.println(somaparcial); 

                          i = i + 1;

                          somaparcial = somaparcial + i;

só que não ta dando certo.

Oi!

Me fala, o que exatamente tu quer fazer?! Que tipo de soma tu quer?! :slight_smile:
Abraços.

L

1+2+3+4+5+6+7+8+9+10
o resultado deveria ser 55.

pmlm

Vê com atenção o teu código e diz qual é o primeiro valor que soma parcial vai ter, depois de 0.

L

2

pmlm

E era esse o valor que deveria? Parece-me que não…

L

Deveria ser 3… deixe me analisar um pouco mais meu codigo.

pmlm

Não. Deveria ser 1.
Tu estás a começar a somar os números.
Tens 0, quando somas o 1 deverias ter 1.

L

E porque neste comando está tudo certo:

int soma = 0;  
  	for (int i = 1; i <= 10; i= i + 1){  
                soma = soma + i;

Não deveria ser o mesmo raciocinio do outro?

L

desculpe eu postei errado, seria esse:

int soma = 0;  
        for (int i = 1; i <= 10; i= i + 1){  
         soma = soma + i;
pmlm

Este começa com o i em 1, soma, e depois incrementa.

int soma = 0; for (int i = 1; i <= 10; i= i + 1){ soma = soma + i; }

Enquanto este começa com i em 1, incrementa e só depois soma.

int i = 1;   
      
    int somaparcial = 0;   
      
          while ( i<=10){   
      
               System.out.println(somaparcial);   
      
                     i = i + 1;  
      
                     somaparcial = somaparcial + i;  
}
L

Entendi! e como eu faço pra alterar a ordem?

pmlm

Alterando a ordem :slight_smile:

int i = 1;     
        
    int somaparcial = 0;     
        
          while ( i<=10){     
        
               System.out.println(somaparcial);     
        
                somaparcial = somaparcial + i;  

                i = i + 1;    //esta passa a ser a última instrução
}
L

Desse modo a soma resulta em 45. :?

L

Alguém sabe por que isso?

regis_hideki
int i = 1;     
         
    int somaparcial = 0;     
         
          while ( i<=10){     
         
               System.out.println(somaparcial);     
         
                     i = i + 1;     
         
                     somaparcial = somaparcial + i;     
}
somaParcial = 2+3+4+5+6+7+8+9+10+11 = 65
int i = 1;       
           
    int somaparcial = 0;       
           
          while ( i<=10){       
           
               System.out.println(somaparcial);       
           
                somaparcial = somaparcial + i;     
  
                i = i + 1;    //esta passa a ser a última instrução   
}
somaParcial = 1+2+3+4+5+6+7+8+9+10 = 55

Ah, e esses prints estão em lugares errados, se o intuito é saber o resultado final, pois a somaParcial é modificada uma vez após o último print

luyz
int i = 1;       
          
    int somaparcial = 0;       
          
          while ( i<=10){       
          
               System.out.println(somaparcial);       
          
                somaparcial = somaparcial + i;    
  
                i = i + 1;    //esta passa a ser a última instrução  
}

Voce quer que mostre na saida isso: 1+2+3+4+5… e por ae vai

usando o exemplo acima olha oque ta acontece

1ª: somaParcial = 0 e i = 1
2ª: somaParcial = 1 e
i = i+1 = 2
3ª: somaParcial = 3 pois teu i agora é 2 e voce soma ele ao somaParcial que é 1,
i = i+1 = 3
4ª: somaParcial = 6 pois teu i agora é 3 e voce soma ele ao somaParcial que é 3, ou seja da 6

e assim ele vai indo, na saida da 45

se voce quer que mostre na saida : 1+2+3+4+5…

use assim

int i = 1; int somaparcial = 0; while ( i<=10){ somaparcial = i; //soma parcial recebe 1 System.out.println("somaParcial: "+somaparcial); //mostra o somaparcial i = i + 1; // incrementa + 1 ao i }

Mudando a ordem o system voce inicia o somaparcial com 1, veja:

int i = 1; int somaparcial = 1; while ( i<=10){ System.out.println("somaParcial: "+somaparcial); i = i + 1; somaparcial = i; }

para ele começar a mostra pelo 1, se quiser por 0, só mudar

Era isso a sua duvida?seja mais especifico se nao for

L

Eu fiquei mechendo aqui e vi que nem precisou disso apenas alterei a ordem e ficou funcionando assim:

int i = 1;                  
       int somaparcial = 0;       
           
          while ( i<=10){   
           
               System.out.println(somaparcial);       
                  somaparcial = somaparcial + i;        
  
                i = i + 1;    //esta passa a ser a última instrução

Ta tudo ok agora.

L

Ops, postei errado novamente, seria isso:

int i = 1;       
           
    int somaparcial = 0;       
           
          while ( i<=10){       

           somaparcial = somaparcial + i;    
               System.out.println(somaparcial);   
        
  
                i = i + 1;    //esta passa a ser a última instrução
regis_hideki

Sim, como eu já havia postado, a resultado de somaParcial era modificado uma vez depois do último print, ou seja, estava printando o penúltimo resultado de somaParcial

L

Passei agora pro proximo exercicio, que deve exibir os multiplos de 3 de 1 ate 100.Ele está assim:

int i = 1;
     while (i<100){
      i = i+1;
           if (i%3 = 0)
                System.out.println (i);

Só que dá erro.O que está faltando?

pmlm

A comparação é com ==

L

o “==” não seria uma negação como se tivesse o “!”?

pmlm

http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

L

Gente, o que tem errado nesse programa para imprimir a sequencia fibonacci?

int a =0;
int b = 1;
int c = a+b;

while(c<=10){
    a=b;
                     b=c;

             System.out.println(c);
L

ninguem?

pmlm

O melhor que tens a fazer é pegar em caneta e papel e ir vendo o que acontece no while.

Facilmente verificarás que vais estar sempre a imprimir 1 porque a soma que tens fora do while deveria estar dentro.

L

Eu entendi, eu até estava com a caneta e o papel da mao fazendo os testes mas não percebi que a soma estava fora do while.Obrigado.
Estou no ultimo exercicio desse capitulo em que devo imprimir uma tabela assim:
1
2 4
3 6 9
4 8 12 24
x 2x 3x … x.x
e assim por diante
só q nao tenho ideia de por onde começar.Pode me ajudar?

pmlm

luck008:
Eu entendi, eu até estava com a caneta e o papel da mao fazendo os testes mas não percebi que a soma estava fora do while.Obrigado.
Estou no ultimo exercicio desse capitulo em que devo imprimir uma tabela assim:
1
2 4
3 6 9
4 8 12 24
x 2x 3x … x.x
e assim por diante
só q nao tenho ideia de por onde começar.Pode me ajudar?

Aquele 24 não será 16?

Na tua última linha, já começaste a dizer como tens de fazer: tens x, que neste caso vai de 1 até 4 mas pode ir de 1 até um valor qualquer que definas e depois tens de ir multiplicando esse x de 1 até x.

Se tens de ir de 1 até um valor e depois de 1 até x, isso quer dizer que, de alguma forma, deverás ter de usar dois ciclos. Agora pensa como.

L

Nessa fase, é normal usar quanto tempo para realizar um exercicio como esse?

pmlm

Mais importante do que tempo, é entender como é feito e saber como resolver um problema semelhante para a próxima.

L

O que eu consigui ate agora foi isso:

int x=10;
int a;
int i=1;


                      while(i <x){
System.out.println(i);
a=i ;
i=i+1;
   
int b=1;
b = a*i;
System.out.print(b);

int j=1;
int f=50;
               while(j<f){
                       j=i*i;    
                                   System.out.print(j);        
   i=i+1;

Alguem pode me orientar?

L

e por que o quarto numero está sendo nove e não 3 como eu esperava?

pmlm

Tens variáveis a mais no teu código… Não tentes complicar o que é simples.

Precisas de um n que seja o número de linhas que queres fazer a multiplicação.

Precisas de um i que vá de 1 até n, incrementando por cada linha.

Precisas de um j que, de 1 até i, multiplique j*i

L

Pelo o que eu entendi eu devo fazer:

a=1
n1=2; 2.a “+” n1.n1
n2 =3; 3.a “+” 3.n1 +n2.n2
n3 = 4; 4.a + 4.n1 + 4.n2 + n3.n3

mas eu não consigo fazer isso sem adicionar variaveis para cada numero.

pmlm

Para n = 4 (como está no teu exemplo) i terá de ir de 1 até 4 inclusivé

para i = 1, j irá de 1 até 1 inclusivé e, para cada, imprime i * j - vai imprimir 1

para i = 2, j irá de 1 até 2 inclusivé e, para cada, imprime i * j - vai imprimir 2 4

para i = 3, j irá de 1 até 3 inclusivé e, para cada, imprime i * j - vai imprimir 3 6 9

para i = 4, j irá de 1 até 4 inclusivé e, para cada, imprime i * j - vai imprimir 4 8 12 16

L

como eu faço para ir de 1 até i , por exemplo de 1 até 4 para i =4?

L

Alguem sabe?

Vinicius_Zibetti_Res

ALgo assim:

int n = 10;
for(int i = 1;i <= n;i++){
    System.out.println(i);
}

Isso ai ?!

L

Eu realmente tentei fazer esta tabela e não consegui:
1
2 4
3 6 9
4 8 12 16

até 5.
Alguem pode fazer pra mim e explica-lá por favor?

L

Eu achei no forum o seguinte comando:

for(int i=1;i<=3;i++) {  
               for(int j=i;j<=i*i;j+=i) {  
                       System.out.print(j + " ");  
            }  
               System.out.println();

mas eu não entendi a parte do segundo for : j<=i*i;

Alguem ai pode me explicar?

pmlm

Qual a dúvida? Executa o for enquanto j for menor ou igual que i*i

L

Voce pode transformar esse for em while pra eu tentar entender melhor?

pmlm

for(int j=i;j<=i*i;j+=i) { System.out.print(j + " "); }

int j = i;
while (j <= i*i){
    System.out.print(j + " ");   
    j+=i; // o mesmo que j = j+i
}
L

Esse eu ja tinha transformado em while mas quando eu tranformo os dois for em while dá errado, voce pode transformar os dois fors em while? Desculpe, mas estou querendo aprender corretamente.Obrigado.

pmlm

É fazer exactamente da mesma forma. Como fizeste?

L

Sim

L

Alguem pode transformar esse programa que usa for encadeado em 2 whiles?

int n = 5;

for(int i=1;i <= n;i=i+1){
for(int j =1;j <= i;j=j+1){

System.out.print(i*j + " ");
nel
luck008:
Alguem pode transformar esse programa que usa for encadeado em 2 whiles?
int n = 5;

for(int i=1;i <= n;i=i+1){
for(int j =1;j <= i;j=j+1){

System.out.print(i*j + " ");

Oi!

Você está brincando, não é?
Já possui 5 páginas do seu tópico, elas não foram suficientes para sanar sua dúvida?
E amigo, senão sabe criar dois whiles a partir de um for encadeado, recomendo voltar ao básico. Orientação a Objeto, Laços de Repetição, Lógica (estudar bastante) entre outros.

É um conselho e você deve levar a sério.
Abraços.

L

Só para esclarecer nesse tópico eu estou tirando duvidas sobre varios exercicios e não só sobre isso.
E sobre o while, eu transformei em while da seguinte maneira:

int n = 5;

int i=1;
while(i <= n){
i=i+1;
int j=1;
while(j <= i){


System.out.print(i*j + " ");
j=j+1;
}
System.out.println();

Mas não ta igual.

L

Pode deixar consegui aqui.
:lol:

nel

Oi!

Agora ficou muito mais claro, você ao menos tentou e isso sim é válido.

A posição do x=x+1 estava errada.
Veja o código correto:

int n = 5;   
		  
		for(int i=1;i <= n;i=i+1){   
			for(int j =1;j <= i;j=j+1){
					System.out.print(i*j + " ");
			}
		}
		
		System.out.println();
		System.out.println("############################################################");
		
		int x = 1;   
		while(x <= n){   
			int y=1;   
			while(y <= x){  
				System.out.print(x*y + " ");   
				y=y+1;   
			}
			x = x+1; //posição correta
		}
	}

Certo? Como estava antes, você incrementava o x antes da multiplicação, diferentemente de como é feito no for encadeado.
Abraços.

G

noss 5 paginas sobre laço de repetição :lol:

Criado 21 de junho de 2011
Ultima resposta 27 de jun. de 2011
Respostas 67
Participantes 11