Jump to content
Sign in to follow this  
TP

ordem crescente

Recommended Posts

TP

Boas, eu tenho que implementar um programa que escreve por ordem crescente os três valores inteiros lidos; já fiz o código, esta tudo bem o problema é que no final antes de me aparecer a opção certa, aparece-me todas as opções que eu implementei com if's,

alguém me pode ajudar sff?


import java.util.Scanner;

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

        System.out.println(" Indique tres numeros a sua escolha: ");
                
        int v1 = teclado.nextInt();
        int v2 = teclado.nextInt();
        int v3 = teclado.nextInt();

      if (v1 < v2 || v2 < v3)  
        {
          System.out.println ( v1 + " " + v2 + " " + v3);
        }
      else
        System.out.println ( v1 + " " + v3 + " " + v2);
      
        if (v2 < v1 || v1 < v3)  
        {
          System.out.println ( v2 + " " + v1 + " " + v3);
        }
     else
        System.out.println ( v2 + " " + v3 + " " + v1);
     
        if (v3 < v1 || v1 < v2)  
        {
          System.out.println ( v3 + " " + v1 + " " + v2);
        }
      else
        System.out.println ( v3 + " " + v2 + " " + v1);

  }
}

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Primeiro, não me parece que esteja tudo bem, por exemplo no primeiro if:

if (v1 < v2 || v2 < v3)  
        {
          System.out.println ( v1 + " " + v2 + " " + v3);
        }

O || significa "ou"... Ou seja, segundo o que tens significa: se v1 for menor que v2 OU se v2 for menor que v3 a ordem é: v1 v2 v3. O que é incorrecto, pois v1 pode ser menor que v2, mas o v3 pode ser menor que o v1. E ainda, o v2 pode ser menor que v3, mas o v1 pode ser maior que v3. Deves usar o && que significa E, em vez do OU.

Muito possivelmente, o teu problema é o mesmo em todos, não vou estar a ver todos... Mas como estás a usar o OU é muito possível que todas as verificações retornem true...

Ah... uma nota... devias seguir ter mais atenção ao código que escreves e escrever sempre da mesma forma, por exemplo, ou usas sempre {} nos if's e else's naqueles que têm só uma instrução ou nunca usas. Agora, meter {} no if e depois no else correspondente não colocar, não me parece um bom hábito...

Só mais uma nota, penso que a classe Array tem um método que serve para ordenar arrays, e assim não seria necessário estares a fazer as verificações todas...

Share this post


Link to post
Share on other sites
TP

Obrigada pela tua ajuda, eu já tinha tentado com && mas da na mesma as 3 opções

32 127 -3

-3 32 127 // eu queria que aparecesse só este resultado

127 -3 32

eu ainda não dei os arrays, por isso só posso fazer mesmo assim

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Mas isto, não é de tentar... é de entender o que se está a fazer.

Tens de pensar na lógica e depois transcrever.

Outra coisa, repara que estás a definir as variáveis: valor1, valor2, valor3 e depois nos if's estás a usar v1, v2, v3 !

Share this post


Link to post
Share on other sites
TP

sim, eu sei, eu enganei-me a copiar, porque tentei de varias maneiras, mas nenhuma da certo, eu percebi o que tenho que fazer, nao percebo porque me da 3 resultados

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Porque como já te disse a tua lógica não está correcta. Repara nos números que disseste (32, 127, -3).

Primeiro:

v1 = 32

v2 = 127

v3 = -3

Agora, no 1º if:

v1 < v2 || v2 <3

Isto significa: 32 é menor que 127 OU 127 é menor que -3. Como a primeira parte é verdade, então vai imprimir: 32, 127, -3

2º if:

v2 < v1 || v1 < v3

Isto significa: 127 é menor que 32 OU 32 é menor que -3.  Como nenhuma destas duas condições é verdadeira, então vai imprimir o que tens no else: System.out.println ( v2 + " " + v3 + " " + v1);

Fica aqui o código que eu fiz... vê e lê, quantas vezes forem precisas até o entenderes. E não te habitues a que te passem os códigos feitos...

import java.util.Scanner;

public class Ordem
{
public static void main( String[] args ) {

	Scanner teclado = new Scanner(System.in);

	System.out.println(" Indique tres numeros a sua escolha: ");

	int v1 = teclado.nextInt();
	int v2 = teclado.nextInt();
	int v3 = teclado.nextInt();

	if( v1 < v2 && v2 < v3 ) {

		System.out.println ( v1 + " " + v2 + " " + v3);

	} else if( v1 < v3 && v3 < v2 ) {

		System.out.println ( v1 + " " + v3 + " " + v2);

	} else if( v2 < v1 && v1 < v3 ) {

		System.out.println ( v2 + " " + v1 + " " + v3);

	} else if( v2 < v3 && v3 < v1 ) {

		System.out.println ( v2 + " " + v3 + " " + v1);

	} else if( v3 < v2 && v2 < v1 ) {

		System.out.println ( v3 + " " + v2 + " " + v1);

	} else if( v3 < v1 && v1 < v2 ) {

		System.out.println ( v3 + " " + v1 + " " + v2);

	}

}
}

Ah.. testa-o, porque eu não o fiz. Aliás, nem sou de java... :thumbsup:

Share this post


Link to post
Share on other sites
TP

ahhhhhh depois de muitas horas a volta de isto já percebi qual era o meu erro, devia meter else if com a respectiva condição

muito obrigada pela tua ajuda :thumbsup:

já agora será que podias tirar-me outra duvida sff?

é assim eu tenho uma equação de 2 grau deste tipo: (a x^2 + b x + c = 0)

já fiz o programa com as coisas todas esta tudo a funcionar menos uma parte, o enunciado pede para ignorar os sinais

por exemplo se tiver c = -2

deveria ficar (a x^2 + b x - 2 = 0)

eu ja fiz uns if's mas aparece-me os dois sinais na mesma o + e o - :S

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Ignorar os sinais, como assim? Quando introduzirem números negativos, usar os simétricos, é isso?

Por exemplo, quando introduzirem -2, utilizar o número 2, é isso ?

Share this post


Link to post
Share on other sites
TP

Nao, por exemplo o a é 2 0 b é 3 e o c é -2

(a x^2 + b x + c = 0) em lugar do + tera que ficar - porque o c é -2 assim (2 x^2 + 3 x - 2 = 0)

eu fiz assim:


import java.util.*;
public class Canonica {
  public static void main ( String [] args ) {
    Scanner teclado = new Scanner (System.in);
    
    System.out.println (" Indique o a, b e c da equação de 2º grau");
    double a = teclado.nextDouble();
    double b = teclado.nextDouble();
    double c = teclado.nextDouble();
    
    String simBmenos = " - ";
    String simBmais = " + ";
    String simbB;
    String valorB = Double.toString ( b );
    
    String simCmenos = " - ";
    String simCmais = " + ";
    String simbC;
    String valorC = Double.toString ( c );

    
    if ( valorB == simBmenos )
    {
      simbB = simBmenos;
    }
    else if (valorB == simBmais)
    {
      simbB = simBmais;
    }
    
    if ( valorC == simCmenos )
    {
      simbC = simCmenos;
    }
   else if (valorC == simCmais)
    {
      simbC = simCmais;
    }
    
    
    if ( a == 0)
    {
      System.out.print ( b + " x " + "" + simbC + "" +  c  + " = 0");
    }
   
     if ( b == 0)
    {
      System.out.print ( a + " x^2 " + "" + simbC + "" +  c  + " = 0");
    }
     
     if ( c == 0)
    {
      System.out.print ( a + " x^2 " + "" + simbB + "" +  b  + " x" + " = 0");
    }
    
     else 
    {
      System.out.print ( a + " x^2 " + "" + simbB + "" + b + " x " + "" + simbC + "" + c  + " = 0");
    }
   
    
   
  }
}
        
        


Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Eu tinha percebido, mas como falaste em ignorar eu pensei outra coisa. Não vou estar a ver o teu código agora, mas penso que basta colocares B dentro de parêntesis. Ou seja, ficava algo como a x^2 + (:thumbsup: x + c = 0. Assim o b, pode ser negativo ou positivo que não há problema :)

Share this post


Link to post
Share on other sites
TP

lol pois isso eu sei, mas o meu prof quer mesmo que fique - antes de +

e se o c for 2, ai sim poderá ficar +2.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Então, só tens que verificar se o C é positivo ou negativo e se for negativo, mudas o sinal que o antecede para - (menos).

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

LOL ! Primeiro, como já te disse antes tens de ter mais cuidado com o código que escreves... E, depois acho que te devias aplicar um bocadinho mais na lógica... porque a tua lógica parece-me muito fraquinha...

1) Para que queres as variáveis simBmenos, simBmais, simCmenos e simCmais !?

2) Sabes o que estás a fazer nos if's !? Parece-me que não...

Por exemplo, no código abaixo estás a fazer o seguinte:

Supondo que, b = -2: se -2 é igual a " - ", então simbB é igual a " - ".

Achas que isso tem lógica !? O que devias fazer era verificar se b é positivo ou negativo, isto é: if( b < 0 ) simbB = " - "

if ( valorB == simBmenos )
    {
      simbB = simBmenos;
    }

Bem, espero que tenhas percebido e que eu te tenha conseguido ajudar de alguma forma. E,... te apliques um bocadinho mais no que à lógica diz respeito, porque sem perceber a lógica não te adianta saber os comandos... :thumbsup:

Share this post


Link to post
Share on other sites
TP

eu já tinha tentado como tu disses-te mas não me deixava atribuir por exemplo um " - " ao sinal C foi por isso que eu meti isso como strings para ele reconhecer.

Mas obrigada pela tua ajuda =)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.