Exercício Java [Resolvido]

21 respostas
FlavioHenrique

Olá.

Estou fazendo um curso de Java e o professor e estou tentando fazer um exercicio, mas
ele ta um pouco dificil, não sei como resolver, pois já pesquisei, não sei onde
pesquisar mais, se alguem puder me ajudar (não resolver, mas só ajudar por favor):

2) Verifique o valor de uma variável x, imprimindo uma mensagem quando for maior, menor
e igual a 10, sem usar o if().

Obs: Tentei o usar o Switch case, mas ele faz comparação numérica e não booleana.

Espero que possam me ajudar.

Obrigado desde já!

21 Respostas

Alfredo_Barbosa

sem usar o if()… eu usaria o operador ternário…

int aux=(variavel<10? -1: (variavel>10? 1: 0));

switch(aux) {
    case -1: //variavel menor que 10
    case +1: //variavel maior que 10
    case 0:  //variavel igual a 10
}

apelei?

FlavioHenrique

Hmm, intendi…
Muito obrigado Alfredo.

Abração!

Jesuino_Master

Será que pode usar o operador ternário hein?

Se sim, não é melhor fazer algo assim?

public class MenorQue10{
	public static void main(String args[]){
		System.out.println(Integer.parseInt(args[0])<10?"Eh Menor":"Naum eh Menor");		
	}
}

Tem outras formas, deixa eu fechar uns incidentes aqui e já posto :slight_smile: (ou vamos discutindo formas de se fazer)

Alfredo_Barbosa

eu disse como usar o switch() porque ele pensou nisso…
e dei a alternativa do operador ternário, só isso…

e é preciso concatenar o operador ternário pra analisar a possibilidade =10

se fosse em C dava pra analisar bit a bit, mas em java eu não vejo outra alternativa senão o operador ternário…

bem… na verdade daria pra usar while se puder usar break

while(variavel<10) {
    System.out.print("menor que 10");
    break;
}
while(variavel>10) {
    print("maior");
    break;
}

e até for (desconsiderando a inicialização e o passo você fica com um while…)

for(; variavel==10;) {
    System.out.println("igual a 10");
    break;
}

hauhauahuah
que feio…

Jesuino_Master

Alfredo Barbosa:
eu disse como usar o switch() porque ele pensou nisso…
e dei a alternativa do operador ternário, só isso…

e é preciso concatenar o operador ternário pra analisar a possibilidade =10

se fosse em C dava pra analisar bit a bit, mas em java eu não vejo outra alternativa senão o operador ternário…

:o

Na verdade eu pensei em altas formas, queria ver pra gente discutir as formas possíveis!

Olha mais uma, mas só pra números positivos

public class MenorQue10{
	public static void main(String args[]){
		int num = Integer.parseInt(args[0]);			
		num /=10;				
		switch(num){
			case(0):
				System.out.println("Eh Menor");
			break;	
			default:
				System.out.println("Naum Eh menor");
			break;
		}	
			
	}
}

Quando o número for menor que 10 o resultado vai ser 0 :stuck_out_tongue:

tem como usar o While e o For também, só que na primeira iteração, tendo como condição o número menor que 10, você sai do programa :stuck_out_tongue:

tem outras formas loucas também!

Alfredo_Barbosa

o resto não, o resultado mesmo, né?
assim você já vê se ele é menor ou não
depois usando o resto da divisão você vê se ele é igual ou maior

Jesuino_Master

Alfredo Barbosa:
o resto não, o resultado mesmo, né?
assim você já vê se ele é menor ou não
depois usando o resto da divisão você vê se ele é igual ou maior

É vdd, edited :slight_smile:

FlavioHenrique

Eu só queria uma forma mais simples mesmo. :slight_smile:
Pois to começando agora.

^^

Obrigado ai galera.

Alfredo_Barbosa

olha, roubei seu código

public class MenorQue10{
       public static void main(String args[]){
		int num = Integer.parseInt(args[0]);	
                int aux=num%10;		
		num /=10;				
		switch(num){
			case(0):
				System.out.println("Eh Menor");
			break;	
			case 1:
				switch(aux) {
                                        case 0: 
                                               System.out.println("igual");
                                               break;
                                        default:
                                                System.out.println("maior");
                                                break;
                                }
			break;
                        default: 
                               //maior também
		}	
			
	}
}
Jesuino_Master

Quer saber outra forma doida de pura gambiarra também? Lendo o texto do número:

public class MenorQue10{
	public static void main(String args[]){
		switch (args[0].length()){
			case (1):
				System.out.println("Eh Menor");
			break;
			default:
				switch(args[0].charAt(0)){
					case ('-'):
						System.out.println("Eh Menor");
					break;
					default:
						System.out.println("Naum Eh Menor");
					break;
				}				
			break;
		}
	}	
}

Flávio, desculpe por zoar seu post :stuck_out_tongue:

FlavioHenrique

Agora sim ficou mais facil ainda intender.
Muito bom.

Obrigado mesmo Alfredo, vlw Jesuino.

:smiley:

Alfredo_Barbosa

Jesuino Master:
Quer saber outra forma doida de pura gambiarra também? Lendo o texto do número:

public class MenorQue10{
	public static void main(String args[]){
		switch (args[0].length()){
			case (1):
				System.out.println("Eh Menor");
			break;
			default:
				switch(args[0].charAt(0)){
					case ('-'):
						System.out.println("Eh Menor");
					break;
					default:
						System.out.println("Naum Eh Menor");
					break;
				}				
			break;
		}
	}	
}

Flávio, desculpe por zoar seu post :P

e colocando outro switch lá dentro pra saber se é igual ou maior =D
que aula de lógica, Jesuíno!

FlavioHenrique

:slight_smile: Vlw.

A

Eu usaria o switch case para responder o exercício no entanto acho o modo com ternário mais elegante.

ViniGodoy

E como vc analisaria bit-a-bit sem o if?

Não sei se vc sabe, mas o java tem todos os operadores bitwise que o C tem.

Alfredo_Barbosa

E como vc analisaria bit-a-bit sem o if?

Não sei se vc sabe, mas o java tem todos os operadores bitwise que o C tem.

realmente eu não sabia disso no java =O

eu analisaria os bits usando o operador ternário ou o switch() mesmo =)
(lembrando que a questão não é sobre legibilidade ou desempenho, mas sim sobre alternativas, é uma pegadinha)

System.out.println(
    (4° bit menos significativo)==0? "menor": (
        (3° bit menos significativo)==0? ((2° bit menos significativo)==0? "menor": ((1° bit menos significativo)==0? "igual": "maior")):
            "maior")));

assim =D

calma aí… meu pseudo código ficou complicado… olha matematicamente…

0xxxx => menor
10xx =>
    100x => menor
        1010 => igual
        1011 => maior
11xx => maior

considerando um int (32 bits) é só colocar cada outro bit na fórmula
se um deles for 1 já era, o número é maior

ViniGodoy

Ah tá, pensei que usando operadores bitwise vc teria uma forma sem o ternário, que já havia sido citado. Fiquei imaginando qual… heheheh

Alfredo_Barbosa

ah, if() é essencial, né…
não sei se tô falando asneira, mas acho que tudo é baseado em if(), break e goto():
while() e consequentemente do while() e for(), o operador ternário, switch()
e depois disso toda a orientação a objetos
acho que o professor do menino vai aceitar o operador ternário mesmo…

Jesuino_Master

tem outra forma também, de gambiarra de novo :slight_smile:

public class MenorQue10{
	public static void main(String args[]){
		int num = Integer.parseInt(args[0]);
		num-=10;	
		switch (num){
			case (0):
				System.out.println("Eh igual a 10");
			break;
			default:
				switch(String.valueOf(num).charAt(0)){
					case ('-'):
						System.out.println("Eh Menor que 10");
					break;
					default:
						System.out.println("Eh maior que 10");
					break;
				}				
			break;
		}
	}	
}
Alfredo_Barbosa

fazendo num-=10 dá pra usar a função Integer.signum(int x) e fazer um switch() como aquele que eu fiz usando o operador ternário XD

Jesuino_Master

Vixi, matou! Não conhecia essa função:

http://www.java2s.com/Tutorial/Java/0040__Data-Type/Integersignumreturns.htm

Valeu!!!

Acho que é a solução menos gambiarra sem o ternário e sem o IF:

public class MenorQue10{
	public static void main(String args[]){
		int num = Integer.parseInt(args[0]);
		num-=10;	
		switch (Integer.signum(num)){
			case (0):
				System.out.println("Eh igual a 10");
			break;
			case (1):
				System.out.println("Eh maior que 10");
			break;			
			case (-1):
				System.out.println("Eh menor que 10");
			break;	
			default:
				System.out.println("IT SHOULD NEVER HAPPEN!");
			break;
		}
	}	
}

Vlw pelo post, me garantiu um divertimento entre um incidente ou outro aqui na empresa :smiley:

Criado 22 de fevereiro de 2011
Ultima resposta 23 de fev. de 2011
Respostas 21
Participantes 5