Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [java]numeri crescenti

  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]numeri crescenti

    Ciao ho iniziato da poco a studiare java ed ho incontrato delle difficoltà nell'eseguire questo esercizio:
    Scrivere un programma che riceva tre numeri in virgola mobile come dati in
    ingresso, per poi stamparli in ordine crescente. (io ho sviluppato solo un caso)
    es: 5,0
    3,0
    4,0
    output: 3,0
    4,0
    5,0

    Il mio codice è:
    codice:
    class Numeri{
    double a,b,c;
    Numeri(){
    a=0.0;
    b=0.0;
    c=0.0;
    }
    public void ordina(double x,double y,double z){
        a=x;
        b=y;
        c=z;
        double temp=0.0;
        
        if(b<c)
            if(c<a)
                if(b<a){
            temp=a;
            b=c;
            a=b;
            c=temp;
        }else
            temp=a;
            a=b;
            b=temp;
        }
        public double getA(){
            return a;
        }
        public double getB(){
            return b;
        }
        public double getC(){
            return c;
        }
    }
    da main:
    codice:
    import java.util.Scanner;
    class Numeri1{
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    System.out.println("scrivi 3 numeri");
    double a=sc.nextDouble();
    double b=sc.nextDouble();
    double c=sc.nextDouble();
    Numeri n=new Numeri();
    n.ordina(a,b,c);
    System.out.println("i numeri in ordine");
    System.out.println(n.getA());
    System.out.println(n.getB());
    System.out.println(n.getC());
    }
    }
    Il punto è che da terminale il programma stampa l'ultimo numero uguale a quello precedente.
    es se scrivo : 5,0
    3,0
    4,0

    output: 4,0
    5,0
    5,0
    dov'è che ho sbagliato?
    Ultima modifica di el92; 01-02-2015 a 13:09

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    codice:
        if(b<c)
            if(c<a)
                if(b<a){
            temp=a;
            b=c;
            a=b;
            c=temp;
        }else
            temp=a;
            a=b;
            b=temp;
        }

    Questo codice è sbagliato.
    Anzitutto, se b < c e c < a allora b sarà sempre anche minore di a (quindi, il terzo if è assolutamente inutile).
    L'indentazione fatta male, poi, inganna l'occhio: quel ramo "else" (composto da UNA SOLA ISTRUZIONE) non verrà mai eseguito (per quanto detto prima), quindi, nel caso in cui b non sia minore di c o nel caso in dui c non sia minore di a, semplicemente non viene fatto nulla. Inoltre, se b è minore di c, viene sempre assegnato b ad a e temp a b... qualunque siano i loro valori.

    Riscrivo esattamente il tuo codice, usando un'indentazione corretta (e le parentesi graffe che nel tuo codice mancano e che aiuterebbero a capire l'errore):

    Questo è esattamente il tuo codice indentato meglio (ho anche esplicitato le graffe implicite):

    codice:
        if(b<c) {
            if(c<a) {
                if(b<a){
                    temp=a;
                    b=c;
                    a=b;
                    c=temp;
                }else {
                   temp=a;
                }
                a=b;
                b=temp;
            }
        }

    Come vedi va completamente rivisto.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao ho risolto avevi ragione grazie per la risposta

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.