Exercício 4.23 Java como Programar

44 respostas
K

Boa tarde.

Sou novo aqui no fórum (como dá pra perceber =D), e estou com uma dúvida em um exercício do livro Java Como Programar - 6ª Edição.

O livro pede para tomar por base o código que fizemos no exercício 4.21 (esse código eu fiz, mas esses exercícios não tem a resposta no livro, então talvez não esteja certo. Mas eu acho que está =D):

import java.util.Scanner;

public class MaiorValor 
{

	public static void main (String args [])
	{
		
		int contador = 1;
		int numero = 0;
		int maiorValor = 0;
		int vendedorFoda = 0;
		Scanner entrada = new Scanner(System.in);
		
		while ( contador <= 10)
		{
			
			System.out.printf("\nInsira o número de unidades vendidas do vendedor %d: ", contador);
			numero = entrada.nextInt();
			
			if (numero > maiorValor)
			{
				maiorValor = numero;
				vendedorFoda = contador;
			}
			++contador;
		}
		
		System.out.printf("\nO maior número de vendas foi do vendedor %d!: %d unidades!\n", vendedorFoda, maiorValor);
		System.out.printf("\nParabéns vendedor %d!", vendedorFoda);
				
	}
	
}

Bom, vamos ao problema:

O livro pede para que agora sejam mostrados na tela os dois maiores valores digitados pelo usuário de um total de 10 valores, e esses não podem ser repetidos, ou seja, se você digitou o 1, e digitá-lo novamente, o programa tem que avisar que o número já foi digitado e pedir para inserir outro.

Como o livro ainda não ensinou arrays, não consigo ver outra forma de fazer isso sem colocar cada valor em uma variável. Mas aí o código fica muito grande pra pouca coisa, então penso que tem alguma outra coisa que eu possa fazer. Só que não me vem à cabeça o que fazer.

Criei um código aqui, mas ele não impede você de digitar novamente o mesmo valor porque ele guarda apenas quatro valores: primeiroValor, segundoValor, numeroAnterior e numeroAtual.

O código é esse:
import java.util.Scanner;

public class EncontrarNumeros 
{

	public static void main (String args[])
	{
		int numeroAnterior = 0;
		int numeroAtual = 0;
		int primeiroValor = 0;
		int segundoValor = 0;
		int contador = 1;
		Scanner entrada = new Scanner(System.in);
		
		while ( contador <= 10 )
		{
			
			System.out.printf( "\nInsira o valor %d: ", contador);
			numeroAtual = entrada.nextInt();
			
			if ( numeroAtual == primeiroValor || numeroAtual == segundoValor || numeroAtual == numeroAnterior)
			{
				
				System.out.println("Este numero já foi inserido.");
				
			}
			else
			{
				if ( numeroAtual > primeiroValor)
					primeiroValor = numeroAtual;
				else if (numeroAtual > segundoValor)
					segundoValor = numeroAtual;
				
				numeroAnterior = numeroAtual;
				++contador;
			}
		}
	}
}

OBS: Nesse último código eu não coloquei a saída (System.out.printalgumacoisa) porque a trava dos números lá ainda não deu certo.

Obrigado de antemão pela ajuda. o/

44 Respostas

A

Putz kra se vc resumir a sua dificuldade eu t ajudo… Tem muito texto pra ler rs (sendo honesto)… abs,

André AS.

K

Ok.

TL;DR: Como que eu faço pra, sem utilizar arrays, realizar o controle de quais números eu já digitei, num total de 10, para que o programa diga que eu já digitei aquele número?

Exercício 4.21: (Já fiz)
Escreva um programa em pseudocódigo e então um aplicativo Java que aceite como entrada uma série de 10 inteiros e determine e imprima o maior dos inteiros. Seu programa deve utilizar pelo menos três variáveis, descritas a seguir:

  • contador: um contador para contar até 10 (isto é, monitorar quantos números foram inseridos e determinar quando todos os 10 números foram processados).
  • numero: o inteiro mais recentemente inserido pelo usuário.
  • maiorValor: o maior número encontrado até agora.

Exercício 4.23 b[/b]

Utilizando uma abordagem semelhante àquela do Exercício 4.21, encontre os dois maiores valores entre os 10 valores inseridos. [Nota: Você só pode inserir cada número uma vez.]

PS: Só pode utilizar loops while e instruções de controle if e else

MaYaRa_SaN

Kakofonia, se o exercício pede que voce so use array e laços de repetição, voce pode garantir que não haverá repetição da seguinte forma:

percorra todo o array comparando o conteúdo da posição com o valor novo que voce quer inserir, caso encontre alguem igual, altere o valor de um boolean e interrompa o laço.

int[] valores = new int[10];
boolean encontrou = false;
int idx = 0;

int valorNovo = 6;

for(int val : valores){
  if(val == valorNovo){
     encontrou = true;
     break;
  }
}

após essa verificação voce testa e so insere se tua variável boolean esteja com valor false.

if(encontrou == false){
  valores[idx] = valorNovo;
  idx++;
}

percorre todo o array comparando o valor com o valor que tens atualmente no max1 e max2…

int max1, max2;

for(int val : valores){
  if(val > max1){
     max1 = val;
  }else{
    if(val < max1 && val > max2){
       max2 = val;
    }

  }
 

}

como escrevi o codigo direto aqui na resposta, pode haver algum errinho…

:wink:

Fyowti

Ele disse que não pode usar Array…

K

Obrigado pela resposta MaYaRa_SaN, mas como o livro não ensinou arrays ainda, o exercício “impede” de utilizá-los.

O meu problema é justamente esse: como fazer a verificação de caracteres já digitados se não tenho onde guardá-los, entende?

A única forma que eu vejo de fazer isso é criando uma variável pra cada dado inserido, mas aí o loop while não iria funcionar e teríamos mais de 10 variáveis num micro-programinha, o que eu penso não ser o intuito do exercício.

Será que dá pra fazer essa verificação de caracteres já digitados sem precisar de array?

Agradeço desde já a atenção despendida. =D

MaYaRa_SaN

isso que dá ler as coisas pela metade...

mas como nosso amigo fez questão de me lembrar que NAO deve usar array, e a solução que é bom ele não deu, segue minha sugestão:
import java.util.Scanner;

public class EncontrarNumeros {

	public static void main(String args[]) {
		int valorNovo, max1 = 0, max2 = 0;
		String valores = "", val = "";
		int contador = 1;
		Scanner entrada = new Scanner(System.in);

		while (contador <= 4) {

			System.out.println("Informe um valor: ");
			valorNovo = entrada.nextInt(); // le o inteiro

			val = "" + valorNovo;// transforma em string

			// verifica se existe esse nr na string
			if (valores.contains(val) == false) {
				valores += ";" + val;
				contador++;
			} else {
				System.out.println("Este valor já foi inserido;");
			}

			// verifica se o valor digitado é maior que o anterior
			if (valorNovo > max1) {
				max1 = valorNovo;
			} else {
				if (valorNovo < max1 && valorNovo > max2) {
					max2 = valorNovo;
				}
			}
		}
		
		System.out.println("Maior valor digitado: "+max1);
		System.out.println("segundo Maior valor digitado: "+max2);
	}
}
MaYaRa_SaN

Oi Kakofonia,

coloquei os valores em uma variável string… ela funciona como memória dos valores antigos e pra ver se eles ja foram digitados, uso o método contains.

:wink:

espero ter ajudado

X

MaYaRa_SaN:
Oi Kakofonia,

coloquei os valores em uma variável string… ela funciona como memória dos valores antigos e pra ver se eles ja foram digitados, uso o método contains.

:wink:

espero ter ajudado

Uhuu -
Aprendi uma coisa nova método contains simplifico mt coisa aki…

K

Uau!

Muito legal essa “técnica” de guardar valores em string =D essa é nova pra mim.

Só tem uma coisa: o problema dos livros é que nos exercícios só pode utilizar o que você aprendeu no capítulo atual e nos anteriores, e o contains não foi introduzido ainda.

To quebrando a cabeça faz uns dias aqui nesse exercício. Talvez eu comece a utilizar essa sua técnica e passe para o próximo =D

Mas eu fico curioso pra saber como eles resolveriam esse problema sem essas ferramentas, porque sabendo isso a gente pode utilizar a mesma técnica futuramente e criar códigos mais enxutos.

Mas de qualquer forma agradeço a boa vontade =D

MaYaRa_SaN

até eu fiquei curiosa pra saber como eles resolveram esse problema… não tem a solução no site deles?

Fyowti

Não dei a solução pq não sabia. :smiley:
Me desculpe por ter metido o dedo na sua cara…

MaYaRa_SaN

tudo bem Fyowti, eu te perdoou :slight_smile:

K

Então, a solução só tem na edição de Professor desse livro, mas eu não acho em lugar algum…

Vou tentar procurar e se eu achar posto aqui o/

Abraços!

K

Consegui encontrar a versão do livro para professores, mas da 5ª edição, e eu to aprendendo com a 6ª. Mas eu encontrei o exercício e a solução.

Sabe o que eu descobri?

Que o livro em português está com uma falha de tradução.

Olha só como tá escrito em inglês:

“4.17 Using an approach similar to that for Exercise 4.15, find the two largest values of the 10 digits entered. [Note: You may input each number only once.]”

Tradução (própria): “Usando uma abordagem similar à do exercício 4.15, encontre os dois maiores valores de 10 dígitos inseridos. [Nota: Você pode/deve inserir cada número uma só vez.]”

Tradução do livro: “Utilizando uma abordagem semelhante àquela do Exercício 4.21, encontre os dois maiores valores entre os 10 valores inseridos. [Nota: Você só pode inserir cada número uma vez.]”

Resumindo: A tradução do livro colocou um “só” ali, dando a entender que o programa deveria travar a inserção de dados repetidos, mas na verdade quem não tem que colocar dados repetidos é o próprio usuário O.o

Vendo pelo lado positivo, aprendi a usar o “contains” o/

Obrigado pela ajuda!

MaYaRa_SaN

ehehehhe é… aí fica bem mais simples

:wink:

A
[quote=MaYaRa_SaN]isso que  ler as coisas pela metade...

mas como nosso amigo fez questão de me lembrar que NAO deve usar array, e a solução que é bom ele não deu, segue minha sugestão:
[code]
import java.util.Scanner;

public class EncontrarNumeros {

	public static void main(String args[]) {
		int valorNovo, max1 = 0, max2 = 0;
		String valores = "", val = "";
		int contador = 1;
		Scanner entrada = new Scanner(System.in);

		while (contador <= 4) {

			System.out.println("Informe um valor: ");
			valorNovo = entrada.nextInt(); // le o inteiro

			val = "" + valorNovo;// transforma em string

			// verifica se existe esse nr na string
			if (valores.contains(val) == false) {
				valores += ";" + val;
				contador++;
			} else {
				System.out.println("Este valor já foi inserido;");
			}

			// verifica se o valor digitado é maior que o anterior
			if (valorNovo > max1) {
				max1 = valorNovo;
			} else {
				if (valorNovo < max1 && valorNovo > max2) {
					max2 = valorNovo;
				}
			}
		}
		
		System.out.println("Maior valor digitado: "+max1);
		System.out.println("segundo Maior valor digitado: "+max2);
	}
}
[/quote]

Adorei sua lógica... Legal mesmo... Principalmente o esquema de usar o contains... Eu não tinha pensado nisto rs...

Só pra incrementar seu código, pois peguei um bug... Vc pode substituir o seguinte trecho:

if (valorNovo > max1) {   
	                max1 = valorNovo;   
	            } else {   
	                if (valorNovo < max1 && valorNovo > max2) {   
	                    max2 = valorNovo;   
	                }   
	            }
Por este:
if (valorNovo > max1) {   
	            	max2 = max1;
	                max1 = valorNovo;   
	            } else {   
	               if (valorNovo > max2) {
	            	   max2 = valorNovo; 
	               }
				}

Reprodução do bug: Digitar 4 depois 3 depois 2 depois 1 -> o Resultado deveria ser 4 e 3.

Abraços,
André AS.

MaYaRa_SaN

Oi André,

obrigada pela dica! :wink:

K

O código ficou melhor que o do livro =D

K

Bom dia a todos.

Bom, como a dúvida já foi sanada, vim aqui agradecer o empenho e a boa vontade do pessoal que se propôs a ajudar no fórum e também compartilhar como ficou o meu código (ficou muito mais enxuto que o do livro, modéstia à parte =D).

Não inseri o controle por String como nossa amiga Mayara ensinou, mas com certeza utilizarei posteriormente essa técnica. Obrigado MaYaRa_SaN!

import java.util.Scanner;

public class EncontrarNumeros 
{

	public static void main (String args[])
	{
		int numeroAtual = 0;
		int primeiroValor = 0;
		int segundoValor = 0;
		int contador = 1;
		Scanner entrada = new Scanner(System.in);
		
		while ( contador <= 10 )
		{
			
			System.out.printf( "\nInsira o valor %d: ", contador);
			numeroAtual = entrada.nextInt();
			
				if ( numeroAtual > primeiroValor)
				{
					segundoValor = primeiroValor;
					primeiroValor = numeroAtual;
				}
				
				else if (numeroAtual > segundoValor)
					segundoValor = numeroAtual;
				
				++contador;
		}
		System.out.printf("\nOs dois maiores números são, respectivamente: %d e %d.", primeiroValor, segundoValor);
	}
}

Se tiverem alguma opinião ou dica de algo que eu poderia melhorar na minha escrita de código ou algo similar, agradecerei imensamente.

Obrigado.

Sérgio R. R. Teixeira

A

Da hora!

Uma outra lógica é você receber estes 10 valores em variáveis individuais, ordená-los e imprimir os dois últimos... Veja um exemplo:

int i1 = 5;   
int i2 = 1;   
int i3 = 4;   
int i4 = 3;   
int i5 = 2;   
  
int aux = 0;   
  
while (i1 > i2 || i2 > i3 || i3 > i4 || i4 > i5)   
{   
   aux = i4;   
   i4 = i5;   
   i5 = aux;   
     
   while (i1 > i2 || i2 > i3 || i3 > i4)   
   {   
      aux = i3;   
      i3 = i4;   
      i4 = aux;   
         
      while (i1 > i2 || i2 > i3)   
      {   
         aux = i2;   
         i2 = i3;   
         i3 = aux;   
  
         while (i1 > i2)   
         {   
            aux = i1;   
            i1 = i2;   
            i2 = aux;   
         }   
      }   
   }   
}   
  
System.out.println("O 1° Maior Número é "  + i5);
System.out.println("O 2° Maior Número é " + i4);
MaYaRa_SaN

Não recomendo usar a String como solição para esse tipo de problema, o melhor mesmo seria um array ou uma List… mas como entendemos o exercício da forma errada, foi a unica coisa que veio a minha cabeça. eheheh

o melhor mesmo é trabalhar com coleções, mas como você está no inicio, aumente a dificuldade gradativamente para não se perder.

:wink:

A
andredecotia:
Da hora!

Uma outra lógica é você receber estes 10 valores em variáveis individuais, ordená-los e imprimir os dois últimos... Veja um exemplo:

int i1 = 5;   
int i2 = 1;   
int i3 = 4;   
int i4 = 3;   
int i5 = 2;   
  
int aux = 0;   
  
while (i1 > i2 || i2 > i3 || i3 > i4 || i4 > i5)   
{   
   aux = i4;   
   i4 = i5;   
   i5 = aux;   
     
   while (i1 > i2 || i2 > i3 || i3 > i4)   
   {   
      aux = i3;   
      i3 = i4;   
      i4 = aux;   
         
      while (i1 > i2 || i2 > i3)   
      {   
         aux = i2;   
         i2 = i3;   
         i3 = aux;   
  
         while (i1 > i2)   
         {   
            aux = i1;   
            i1 = i2;   
            i2 = aux;   
         }   
      }   
   }   
}   
  
System.out.println("O 1° Maior Número é "  + i5);
System.out.println("O 2° Maior Número é " + i4);

A minha opinião é, o problema é q às vezes estamos tão acostumados com as funções prontas das Linguagens que acabamos virando usuários delas e não programadores com realmente boas lógicas...

A

MaYaRa_SaN:
Não recomendo usar a String como solição para esse tipo de problema, o melhor mesmo seria um array ou uma List… mas como entendemos o exercício da forma errada, foi a unica coisa que veio a minha cabeça. eheheh

o melhor mesmo é trabalhar com coleções, mas como você está no inicio, aumente a dificuldade gradativamente para não se perder.

;)

:wink: that’s true.

K
andredecotia:
Da hora!

Uma outra lógica é você receber estes 10 valores em variáveis individuais, ordená-los e imprimir os dois últimos... Veja um exemplo:

int i1 = 5;   
int i2 = 1;   
int i3 = 4;   
int i4 = 3;   
int i5 = 2;   
  
int aux = 0;   
  
while (i1 > i2 || i2 > i3 || i3 > i4 || i4 > i5)   
{   
   aux = i4;   
   i4 = i5;   
   i5 = aux;   
     
   while (i1 > i2 || i2 > i3 || i3 > i4)   
   {   
      aux = i3;   
      i3 = i4;   
      i4 = aux;   
         
      while (i1 > i2 || i2 > i3)   
      {   
         aux = i2;   
         i2 = i3;   
         i3 = aux;   
  
         while (i1 > i2)   
         {   
            aux = i1;   
            i1 = i2;   
            i2 = aux;   
         }   
      }   
   }   
}   
  
System.out.println("O 1° Maior Número é "  + i5);
System.out.println("O 2° Maior Número é " + i4);

Achei inusitada a lógica hehe, mas o usuário não pode digitar os valores, só o programador =D
Edit: o código tem só 5 variáveis, então só 5 valores, não é?

X
Kakofonia:
andredecotia:
Da hora!

Uma outra lógica é você receber estes 10 valores em variáveis individuais, ordená-los e imprimir os dois últimos... Veja um exemplo:

int i1 = 5;   
int i2 = 1;   
int i3 = 4;   
int i4 = 3;   
int i5 = 2;   
  
int aux = 0;   
  
while (i1 > i2 || i2 > i3 || i3 > i4 || i4 > i5)   
{   
   aux = i4;   
   i4 = i5;   
   i5 = aux;   
     
   while (i1 > i2 || i2 > i3 || i3 > i4)   
   {   
      aux = i3;   
      i3 = i4;   
      i4 = aux;   
         
      while (i1 > i2 || i2 > i3)   
      {   
         aux = i2;   
         i2 = i3;   
         i3 = aux;   
  
         while (i1 > i2)   
         {   
            aux = i1;   
            i1 = i2;   
            i2 = aux;   
         }   
      }   
   }   
}   
  
System.out.println("O 1° Maior Número é "  + i5);
System.out.println("O 2° Maior Número é " + i4);

Achei inusitada a lógica hehe, mas o usuário não pode digitar os valores, só o programador =D
Edit: o código tem só 5 variáveis, então só 5 valores, não é?

Só colocar acrescentar o Scanner, mt simples...
Sim só vai ter 5 valores, creio que ele queria só mostra a lógica pois 10 valores ia deixar o código mais extenso...

K

Mas os valores já estão colocados nas variáveis.

Se inserir o Scanner vai ferrar com a lógica. Então o código é pra ser como é, pelo que entendi.

X
Kakofonia:
Mas os valores já estão colocados nas variáveis.

Se inserir o Scanner vai ferrar com a lógica. Então o código é pra ser como é, pelo que entendi.

É só tirar os valores já declarado e "declara" com o scanner...
Agora só só complementar com mais 5 variáveis...

Ex:
int i1;
		int i2;
		int i3;
		int i4;
		int i5;
		int aux;

		Scanner scan = new Scanner(System.in);
		System.out.print("Numero 1:");
		i1 = Integer.parseInt(scan.nextLine());//lembrando scanner por padrão recebe String, então precisa do Integer.parseInt() para converte em int.
		
		System.out.print("Numero 2:");
		i2 = Integer.parseInt(scan.nextLine());
		
		System.out.print("Numero 3:");
		i3 = Integer.parseInt(scan.nextLine());
		
		System.out.print("Numero 4:");
		i4 = Integer.parseInt(scan.nextLine());
		
		System.out.print("Numero 5:");
		i5 = Integer.parseInt(scan.nextLine());
		
		while (i1 > i2 || i2 > i3 || i3 > i4 || i4 > i5) {
			aux = i4;
			i4 = i5;
			i5 = aux;

			while (i1 > i2 || i2 > i3 || i3 > i4) {
				aux = i3;
				i3 = i4;
				i4 = aux;

				while (i1 > i2 || i2 > i3) {
					aux = i2;
					i2 = i3;
					i3 = aux;

					while (i1 > i2) {
						aux = i1;
						i1 = i2;
						i2 = aux;
					}
				}
			}
		}

		System.out.println("O 1° Maior Número é " + i5);
		System.out.println("O 2° Maior Número é " + i4);

	}
X

No final de tudo vc uso IF para resolver o problema?

S

Boa tarde

Sou novato e gostaria de desenvolver um sistema em java de acesso em salas especificas atraves do leitor de cod de barra e de biometria, mas não sei utilizar isso no eclispse.

tem com me ajudar

obrigado

X

sndsjr:
Boa tarde

Sou novato e gostaria de desenvolver um sistema em java de acesso em salas especificas atraves do leitor de cod de barra e de biometria, mas não sei utilizar isso no eclispse.

tem com me ajudar

obrigado

Perguntas antes:
Vc é novo na linguagem ou no fórum?
Vc não sabe fazer o sistema só no eclipse?
Oq vc quer saber é como “achar” o dispositivo?

K

Hehe pois é.

O livro ensina que quanto mais legível para um “ser humano” comum for o código, melhor ele será. E quanto mais enxuto e direto ele for, mais fácil será de ler.

E como o capítulo que eu estou ainda é o 4, só aprendi instruções de controle if, else e while. Eu sei que existem for, do… while, e mais algum que eu não me lembro, mas ainda não foram apresentadas no capítulo que estou, então não posso usá-las.

Agora há pouco estava fazendo o exercício 4.29 do livro que pede pra desenhar um quadrado com asteriscos dependendo do numero que o usuário inserir no programa. Tive que pensar bastante pra resolver, mas resolvi =D

Olha a proposta:

Escreva um aplicativo que solicite ao usuário inserir o tamanho do lado de um quadrado e então exiba um quadrado vazio desse tamanho com asteriscos. Seu programa deve trabalhar com quadrados de todos os comprimentos de lado possíveis entre 1 e 20.

Resolvi só com while, if e else.

Quer tentar? =D

X
Kakofonia:
xandi_m5:
No final de tudo vc uso IF para resolver o problema?

Quer tentar? =D

Iiiiiiiiiii Desafiou!! rsrsrsrsr

Fiz assim:

import java.util.Scanner;

public class testeQuadrado {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		long lado = 0;
		long contador = 0;

		while ((lado < 1) || (lado > 20)) {
			System.out.print("Tamanho do lado entre 1 e 20: ");
			lado = Long.parseLong(scan.nextLine());

			if (lado > 20) {
				System.out.println("O numero " + lado
						+ " é invalido, digite novamente: ");
			}
		}

		for (int j = 0; j < lado; j++) {
			System.out.print("*");
		}
		System.out.println();
		contador++;

		while (contador <= lado - 2) {
			System.out.print("*");
			for (int j = 0; j <= lado - 3; j++)

				System.out.print(" ");
			System.out.println("*");
			contador++;
		}

		if (lado > 1)
			for (int j = 0; j < lado; j++) {
				System.out.print("*");
			}
	}
}

Si tiver algum erro de sintaxe ai foi mal... não testei...

A
xandi_m5:
Kakofonia:
xandi_m5:
No final de tudo vc uso IF para resolver o problema?

Quer tentar? =D

Iiiiiiiiiii Desafiou!! rsrsrsrsr

Fiz assim:

import java.util.Scanner;

public class testeQuadrado {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		long lado = 0;
		long contador = 0;

		while ((lado < 1) || (lado > 20)) {
			System.out.print("Tamanho do lado entre 1 e 20: ");
			lado = Long.parseLong(scan.nextLine());

			if (lado > 20) {
				System.out.println("O numero " + lado
						+ " é invalido, digite novamente: ");
			}
		}

		for (int j = 0; j < lado; j++) {
			System.out.print("*");
		}
		System.out.println();
		contador++;

		while (contador <= lado - 2) {
			System.out.print("*");
			for (int j = 0; j <= lado - 3; j++)

				System.out.print(" ");
			System.out.println("*");
			contador++;
		}

		if (lado > 1)
			for (int j = 0; j < lado; j++) {
				System.out.print("*");
			}
	}
}

Si tiver algum erro de sintaxe ai foi mal... não testei...

while ((lado < 2) || (lado > 20)) {  
            System.out.print("Tamanho do lado entre 2 e 20: ");

Se vc alterar a linha do while pra dois ao invés de um conforme acima vc deixa o programa mais real, pois se o usuário consegue digitar um então não consegue formar um quadrado... Só a partir de 2...

abs,

K

Wow! Essa foi em tempo recorde =D

Olha como ficou o meu código:
import java.util.Scanner;

public class Quadrado 
{
	public static void main( String args[] )
	{
		int linha = 0;
		int coluna = 0;
		int tamanho = 0;
		
		Scanner entrada = new Scanner( System.in );
		
		System.out.print("Insira o tamanho do lado do quadrado entre 1 e 20: ");
		tamanho = entrada.nextInt();
		System.out.println();
		
		while ( tamanho < 1 || tamanho > 20)
		{
			System.out.print("Valor inválido. Insira novamente um valor entre 1 e 20: ");
			tamanho = entrada.nextInt();			
		}
		
		linha = tamanho;
		
		while ( linha > 0 )
		{
			coluna = 1;
			
			while ( coluna <= tamanho )
			{
				if ( linha == 1 || tamanho == linha )
				{
					System.out.print("*");
				}
				else if ( coluna == 1 || coluna == tamanho)
					System.out.print("*");
				else
					System.out.print(" ");
				
				++coluna;
			}
			--linha;
			System.out.println();
		}
	}
}

Eaí o que acharam?

PS: O seu código ficou muito legal o/

A
Kakofonia:
Wow! Essa foi em tempo recorde =D Olha como ficou o meu código:
import java.util.Scanner;

public class Quadrado 
{
	public static void main( String args[] )
	{
		int linha = 0;
		int coluna = 0;
		int tamanho = 0;
		
		Scanner entrada = new Scanner( System.in );
		
		System.out.print("Insira o tamanho do lado do quadrado entre 1 e 20: ");
		tamanho = entrada.nextInt();
		System.out.println();
		
		while ( tamanho < 1 || tamanho > 20)
		{
			System.out.print("Valor inválido. Insira novamente um valor entre 1 e 20: ");
			tamanho = entrada.nextInt();			
		}
		
		linha = tamanho;
		
		while ( linha > 0 )
		{
			coluna = 1;
			
			while ( coluna <= tamanho )
			{
				if ( linha == 1 || tamanho == linha )
				{
					System.out.print("*");
				}
				else if ( coluna == 1 || coluna == tamanho)
					System.out.print("*");
				else
					System.out.print(" ");
				
				++coluna;
			}
			--linha;
			System.out.println();
		}
	}
}

Eaí o que acharam?

PS: O seu código ficou muito legal o/

hehehe... q legal... adoro ficar brincando com essas coisas tb! rs...

se me permite, tomei a liberdade d fazer um pequena alteração no seu código nos últimos ifs e elses:

if ( linha == 1 || tamanho == linha )   
	                {   
	                    System.out.print("* ");   
	                }   
	                else if ( coluna == 1 || coluna == tamanho)   
	                    System.out.print("* ");   
	                else   
	                    System.out.print("  ");

Veja como ele imprime agora...

K

Agora ficou um quadrado, rsrsrsrsrsrs.

Antes ficava um retângulo, mas tava com as linhas e colunas contadinhas rsrsrs.

Ficou bem legal o/

Zignd
ola pessoal eu acho que estou no mesmo nível que kakofonia (mas eu cheguei na mesma resposta) mais rapido do que ele e sem pedir ajuda, olha meu código:
import java.util.Scanner;

public class Exercício_4_23 {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        int counter = 1, number, largest1, largest2 = 0;
        
        System.out.print("Entre com o número: ");
        number = entrada.nextInt();
        
        largest1 = number;
        
        while(counter <= 5){
            System.out.print("Entre com o número: ");
            number = entrada.nextInt();
            
            if(number <= largest1) {
                if(number >= largest2) {
                    largest2 = number;
                }
            }
            
            if(number >= largest1){
                largest2 = largest1;
                largest1 = number;
            }
            
            ++counter;
        } // Fim de while
        
        System.out.printf("\n\nOs maiores números são %d e %d\n", largest2, largest1);
        
    } // Fim de main
    
} // Fim da classe Exercício_4_21

mas o problema nessa resposta é que, caso o usuário insira um valor negativo o programa ignora esse valor.

K

Olá Zignd.

Se você tivesse acompanhado o post desde o começo saberia que a minha dúvida era sobre uma trava que na verdade não existia. O código já estava pronto e feito, só faltava a trava, mas como constatei posteriormente, o problema era de tradução do livro, portanto não é necessário inserir uma trava.

Quando ao negócio de negativos… também não sei.

Vou ver se pesquiso., mas o meu também imprime zero ao invés do valor negativo.

Iceguy

Dá pra fazer desenho do quadrado assim:

import java.util.Scanner;  

public class Exercício_4_29 {  
      
	public static void main(String[] args) {  
		Scanner entrada = new Scanner(System.in);  
              
		int contador = 1;  
		int lado = 0;
		String base = "*";
		String corpo = "*";
                
        //Captura o tamanho do quadrado
		while(lado < 1 || lado > 20){
			System.out.print("Digite o lado do quadrado(de 1 a 20): ");  
			lado = entrada.nextInt();  
              
			if(lado < 1 || lado > 20){
				System.out.println("Lado inválido.");
			}
		}

		//Topo do quadrado.
		while(contador < lado){
			base += "*";
			contador++;
		}
		System.out.println(base);

		//Corpo do quadrado.
		contador = 2;
		while(contador < lado){
			corpo += " ";
			contador++;
		}
		corpo += "*";

		contador = 2;
		while(contador < lado){
			System.out.println(corpo);
			contador++;
		}

		//Base do quadrado.
		if(lado > 1){
			System.out.println(base);
		}

	}
}
Iceguy

E o dos dois maiores:

import java.util.Scanner;    
  
public class Exercício_4_23 {    
        
	public static void main(String[] args) {    
		Scanner entrada = new Scanner(System.in);    
                
		int contador = 0;
		int numero = 0;    
		int maxValue = 0;
		int vascoDaGama = 0; //Segundo colocado.

		while(contador < 10){
			System.out.print("Digite um número inteiro: ");    
			numero = entrada.nextInt();  
			
			if(numero > maxValue){
				vascoDaGama = maxValue;
				maxValue = numero;
			}else if(numero > vascoDaGama){
				vascoDaGama = numero;
			}
			
			contador++;
		}
	}
}
Zignd

[color=blue]RESPOSTA EXERCÍCIO 4.29[/color]

import java.util.Scanner;

public class Exercício_4_29 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        int lado, cont1 = 1, cont2 = 1, cont3 = 1, cont4 = 1;
        
        System.out.println("Entre com o valor correspondente ao lado do quadrado:");
        lado = input.nextInt();
        
        while(cont1 <= lado) {
            System.out.print("  _");
            ++cont1;
        }
        
        System.out.println("");
        
        while(cont2 <= lado) {
            System.out.print(" | ");
            while(cont3 <= (lado-2)) {
                System.out.print("   ");
                ++cont3;
            }
            System.out.println("   |");
            cont3 = 1;
            ++cont2;
        }
        
        while(cont4 <= lado) {
            System.out.print("  _");
            ++cont4;
        }
        
        System.out.println("");
    }
}

:D

X

andredecotia
Vlw ela dica!
Eu tb gosto mt de brinca com essas logicas… =D

thomazaudio

.

thomazaudio
public static void main(String[] args){  
       Scanner entrada = new Scanner(System.in);  
         
       int count;  
       int melhor_v=0;  
       int valor_ind;  
        
       int n_maior=0;  
         
       for( count = 1;count <= 10;count++ ){  
          System.out.print("Quantidade vendida pelo vendedor "+count+" :");  
            
          valor_ind = entrada.nextInt();  
          if(valor_ind > n_maior){  
             n_maior = valor_ind;  
             melhor_v = count;  
          }  
            
             
       }  
         
         
     System.out.printf("O melhor vendedor foi o %dº que vendeu %d unidades. ",melhor_v,n_maior);   
     System.out.print("\nParabéns vendedor "+melhor_v);  
         
         
   }
Criado 26 de dezembro de 2011
Ultima resposta 2 de jan. de 2012
Respostas 44
Participantes 9