Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ciclo while esegue un'operazione in più!

    Salve a tutti! In parole povere devo creare un programma che riceva un intero, maggiore di 0 rappresentante la capacità in kg di uno zaino, e riceva una serie di interi rappresentanti i pesi degli oggetti da inserirvi fino a che la somma dei pesi non eccede la capacità oppure viene ricevuto uno 0.
    Al termine il programma deve mostrare la capacità massima e il peso totale degli oggetti contenuti.


    Io l'ho impostato così:



    import java.util.Scanner;
    public class Esercizio3{
    public static void main(String arg[]){
    int capacità, totalepesi, nuovopeso;
    Scanner tastiera=new Scanner(System.in);
    totalepesi=0;
    System.out.println("Ciao!");
    System.out.println("Inserisci qui la capacità massima (in kg)");
    System.out.println("che il tuo zaino può tollerare: ");
    capacità=tastiera.nextInt();
    System.out.println("Bene! Inserisci ora il primo oggetto nel tuo zaino");
    System.out.println("Specificando il suo peso in kg!");
    nuovopeso=tastiera.nextInt();
    while(totalepesi<capacità&&nuovopeso!=0){
    totalepesi+=nuovopeso;
    System.out.println("C'è ancora spazio qui dentro!");
    System.out.println("Puoi continuare ad inserire oggetti!");
    nuovopeso=tastiera.nextInt();
    }
    System.out.println("Bene, abbiamo concluso! Ecco i risultati: ");
    System.out.println("La capacità massima del tuo zaino (in kg) è di: " + capacità);
    System.out.println("Il totale peso totale (in kg) che hai potuto inserire è: " + totalepesi);
    }
    }


    L'output video che ho però è questo:



    Ciao!

    Inserisci qui la capacità massima (in kg)
    che il tuo zaino può tollerare:
    30
    Bene! Inserisci ora il primo oggetto nel tuo zaino
    Specificando il suo peso in kg!
    29
    C'è ancora spazio qui dentro!
    Puoi continuare ad inserire oggetti!
    1
    C'è ancora spazio qui dentro!
    Puoi continuare ad inserire oggetti!
    1
    Bene, abbiamo concluso! Ecco i risultati:
    La capacità massima del tuo zaino (in kg) è di: 30
    Il totale peso totale (in kg) che hai potuto inserire è: 30




    Come potete vedere, il peso totale del contatore si ferma a 30 e mi stampa 30 (che è la capacità massima raggiunta, dato inserito ancor prima del ciclo while dall'utente), però le operazioni che mi fa fare di aggiunta, se ben vedete sono sempre maggiorate di uno!
    CAP MAX 30
    aggiungi oggetto: 29
    aggiungi oggetto: 1

    ||| QUI DOVREBBE FERMARSI|||
    invece:
    aggiungi oggetto: 1

    CAP MAX 30!
    PESO TOTALE INSERITO 30!

    Dove sto sbagliando? Perchè questa operazione in piu?

    P.S.
    HO APPENA FATTO QUEST'ALTRA PROVA:
    Ciao!
    Inserisci qui la capacità massima (in kg)
    che il tuo zaino può tollerare:
    30
    Bene! Inserisci ora il primo oggetto nel tuo zaino
    Specificando il suo peso in kg!
    1
    C'è ancora spazio qui dentro!
    Puoi continuare ad inserire oggetti!
    50
    C'è ancora spazio qui dentro!
    Puoi continuare ad inserire oggetti!
    50
    Bene, abbiamo concluso! Ecco i risultati:
    La capacità massima del tuo zaino (in kg) è di: 30
    Il totale peso totale (in kg) che hai potuto inserire è: 51
    MBP-di-Fiore:uia Papasodero$


    con questi dati.. avrò sbagliato il codice proprio... una mano?
    Ultima modifica di lawrencepad; 05-11-2016 a 15:53

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da lawrencepad Visualizza il messaggio
    Dove sto sbagliando? Perchè questa operazione in piu?
    A rigor di logica, si dovrebbe continuare ad accettare un nuovo peso se (totale + nuovo) è inferiore/uguale alla capacità.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quindi ho sbagliato le condizioni del ciclo while e le devo modificare, oppure devo semplicemente inserire una condizione if dopo aver ottenuto il totale+nuovo? (if totale+nuovo<=capacità)?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da lawrencepad Visualizza il messaggio
    Quindi ho sbagliato le condizioni del ciclo while e le devo modificare, oppure devo semplicemente inserire una condizione if dopo aver ottenuto il totale+nuovo? (if totale+nuovo<=capacità)?
    Si può fare in diversi modi, dipende se vuoi segnalare all'utente che ha ecceduto la capacità o se invece vuoi "silenziosamente" terminare il ciclo giungendo alle conclusioni finali.


    P.S. consiglio: almeno all'inizio non usare caratteri speciali negli identificatori come in capacità. In Java è perfettamente lecito usare qualunque lettera e numero dello standard Unicode negli identificatori. Ma se usi caratteri speciali devi anche preoccuparti di allineare il charset usato dall'editor a quello usato dal compilatore.
    Ultima modifica di andbin; 05-11-2016 a 17:08
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.