Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Programming Java

  1. #1

    Programming Java

    Salve ragazzi..PREMETTO CHE DIVIDO IL MIO MESSAGGIO IN 2 MESSAGGI, poiche' altrimenti supero il limite richiesto, quindi alla fine di questo leggete quell'altro!! ho bisogno di un serio aiuto: il 29 mattina ho un esame di informatica, sono al primo anno di ingegneria gestionale, e in sostanza devo portare un programma scritto in Java. Ho scritto un programma (con l'ausilio di persone piu' esperte di me) che praticamente nel main ti chiede queste 5 cose:

    System.out.println(" 1) Prerequisiti per la verifica dell'allenamento");
    System.out.println(" 2) Aggiungi e Verifica il tuo allenamento");
    System.out.println(" 3) Stampa Dettagli storico allenamenti");
    System.out.println(" 4) Stampa Medie storico allenamenti");
    System.out.println(" 5) Informazioni");

    e in base al tasto che pigi ti svolge alcune funzioni. Le classi del programma sono 3, la main, poi quella chiamata "Allenamento" legata al verificare il proprio allenamento, e la classe "Storico" che gestisce l'aggiungere l'allenamento alla memoria del pc, e lo stampare le "Medie dello storico".

    vi copio qui il programma: eseguitelo con eclipse:

    CLASSE MAIN:

    import java.io.*;

    // Classe principale, dove risiede il metodo main
    // fondamentale per la partenza del programma
    public class Main {


    /** Crea una nuova istanza di Main */
    public Main() {
    }

    public static void main(String[] args) throws IOException
    {
    // Creazione della tastiera
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(in);

    // inizializzazione delle variabili usate successivamente
    String a = "";

    int s = 0;

    // Creazione della classe Storico
    Storico st = new Storico();

    do{
    // Menu' principale per la navigazione

    System.out.println("");
    System.out.println("Salve!!!!");
    System.out.println("");
    System.out.println("Cosa vuoi fare?");
    System.out.println("");
    System.out.println(" 1) Prerequisiti per la verifica dell'allenamento");
    System.out.println(" 2) Aggiungi e Verifica il tuo allenamento");
    System.out.println(" 3) Stampa Dettagli storico allenamenti");
    System.out.println(" 4) Stampa Medie storico allenamenti");
    System.out.println(" 5) Informazioni");


    // Elaborazione delle scelte dell'utente da tastiera
    // con gestione delle eccezioni (try...catch)

    try{
    a = tastiera.readLine();

    // Comando che trasferisce il valore di "a" ad "s", trasformandolo
    //in int da String
    s = Integer.parseInt(a);

    // Possibilità di scelta
    switch (s)
    {
    case 1: {
    // stampa dei prerequisiti per la verifica

    System.out.println("");
    System.out.println("Le domande che vengono poste nel programma sono di carattere");
    System.out.println("tecnico e richiedono la conoscenza di alcuni parametri e dati specifici");
    System.out.println("del settore; è necessario infatti, a fine allenamento:");
    System.out.println("");
    System.out.println("1) Aver calcolato il numero delle vasche fatte");
    System.out.println("2) Aver calcolato il numero delle pulsazioni su 10 secondi");
    System.out.println("3) Aver calcolato tramite cronometro la frequenza di bracciata al minuto");
    System.out.println("4) Aver calcolato il numero delle ore in cui avete nuotato");
    System.out.println("");
    System.out.println("Buona fortuna!");


    }
    break;

    case 2: {

    // Creazione della classe Allenamento
    Allenamento v = new Allenamento();

    // Invocazione del metodo verifica() della classe Allenamento
    v.verifica();

    // aggiunge l'allenamento v nello Storico
    st.Aggiungi(v);

    }
    // Comando che impedisce l'esecuzione delle successive righe del codice
    break;

    case 3: {
    // richiama il metodo StampaTutti di storico per stampare i dettagli di tutti gli allenamenti
    st.StampaTutti();
    }
    break;

    case 4: {
    // richiama il metodo StampaMedia di storico per stampare le medie di tutti gli allenamenti
    st.StampaMedia();
    }
    break;

    case 5: {

    // Stampa delle informazioni
    System.out.println("");
    System.out.println("");
    System.out.println("×÷·.·´¯`·)»»SCRITTO DA:««(·´¯`·.·÷×·.·´");
    System.out.println("•••••••••••••••••••••••••••••• •••••••••");
    System.out.println("•••••••• »»NICCOLO FLORENZANO«« •••••••");
    System.out.println("•••••••••••••••••••••••••••••• •••••••••");
    System.out.println("•••••• »»INGEGNERIA GESTIONALE«« ••••••");
    System.out.println("•••••••••••••••••••••••••••••• •••••••••");
    System.out.println("••••••••••••••»»I ANNO««•••••••••••••••");
    System.out.println("•••••••••••••••••••••••••••••• •••••••••");
    System.out.println(",.-~*'¨¯¨'*·~-.¸-(__)-,.-~*'¨¯¨'*·~-.¸•");

    }
    break;

    }
    }catch(Exception e)
    {
    System.out.println("Errore nella scrittura");
    }

    System.out.println("");
    do
    {
    System.out.println("Vuoi tornare all'inizio? (s/n)");
    a = tastiera.readLine();
    }

    while (!(a.equalsIgnoreCase("s") || a.equalsIgnoreCase("n")));

    }while(a.equalsIgnoreCase("s"));
    // Tutto il codice che è racchiuso nel costrutto "do...while" viene
    // eseguito fintanto che l'affermazione contenuta nel "while" è vera.
    System.out.println("Fine del Programma");
    }
    }


    //fare in modo che se dai un comando sbagliato ti dica errore nella scrittura,
    // vuoi ricominciare dall'inizio?


    CLASSE ALLENAMENTO:

    //importa librerie Java (io=input output + *=tutte)
    import java.io.*;
    //una delle librerie specifiche per la formattazione
    import java.text.DecimalFormat;

    public class Allenamento {

    /** Crea una nuova istanza di Allenamento */
    public Allenamento() {
    }

    // Creazione di un'altra tastiera
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader t = new BufferedReader(in);

    // Inizializzazione delle variabili
    double Ore = 0;
    int Vasche = 0;
    int BracciatePerMinuto = 0;
    double MediaPerVasca = 0;
    int Pulsazioni = 0;
    double MediaPerVascaMin = 0;
    double BracciatePerOra = 0;
    double Velocità = 0;
    double VaschePerOra = 0;
    double BracciatePerVasca = 0;


    // Raccoglie i dati dall'utente e
    // stampa il risultato dell'allenamento (tramite il metodo Stampa)
    public void verifica() throws IOException
    {
    System.out.println("");
    System.out.println("Quante ore hai nuotato?");

    String h = "";

    h = t.readLine();
    Ore = Double.parseDouble(h);

    System.out.println("Quante vasche (da 50m) hai fatto?");

    String v = "";

    v = t.readLine();
    Vasche = Integer.parseInt(v);


    System.out.println("Quante bracciate hai fatto, in media, al minuto?");

    String b = "";

    b = t.readLine();
    BracciatePerMinuto = Integer.parseInt(b);

    System.out.println("Quante pulsazioni hai avuto in 10 secondi?");

    String pm = "";

    pm = t.readLine();
    Pulsazioni = Integer.parseInt(pm);

    VaschePerOra = Vasche/Ore;

    BracciatePerOra = BracciatePerMinuto*60;

    MediaPerVasca = (Ore*3600)/Vasche;

    Velocità = (Vasche*50)/(Ore*60);

    BracciatePerVasca = BracciatePerOra/VaschePerOra;
    Stampa();
    }

    // Stampa risultato allenamento
    public void Stampa() throws IOException
    {
    System.out.println("");
    System.out.println("Bracciate per ora: " + BracciatePerOra);
    System.out.println("");

    DecimalFormat df1 = new DecimalFormat("####.00");
    System.out.println("Velocità: " + df1.format(Velocità) + " metri/minuto");
    System.out.println("");

    System.out.println("Tempo medio di percorrenza medio di una vasca(da50m): " + df1.format(MediaPerVasca) + " sec,");
    System.out.println("");

    DecimalFormat df3 = new DecimalFormat("####.0");
    System.out.println("Bracciate per vasca: " + df3.format(BracciatePerVasca));
    System.out.println("");
    System.out.println("");

    System.out.println("Riepilogo: ");
    System.out.println("");
    if((BracciatePerMinuto < 30) && (Pulsazioni < 23))
    {

    System.out.println("Hai svolto l'allenamento con un basso tasso di stress");
    System.out.println("dovresti arrivare a un maggior numero di pulsazioni e");
    System.out.println("tenere una maggior frequenza di bracciata");

    }

    if((BracciatePerMinuto < 30) && ((Pulsazioni >= 23) && (Pulsazioni <= 28)))
    {

    System.out.println("Hai svolto un allenamento con medio tasso di stress");
    System.out.println("il numero di pulsazioni ogni 10 secondi è nella norma e");
    System.out.println("dovresti cercare di aumentare la frequenza di bracciata");

    }

    if((BracciatePerMinuto < 30) && (Pulsazioni > 28))
    {

    System.out.println("Hai svolto un allenamento con alto tasso di stress");
    System.out.println("il numero di pulsazioni ogni 10 secondi è troppo alto");
    System.out.println("in proporzione alla frequenza di bracciata");

    }

    if(((BracciatePerMinuto >= 30) && (BracciatePerMinuto <= 40) ) && (Pulsazioni < 23))
    {

    System.out.println("Hai svolto l'allenamento con un basso tasso di stress");
    System.out.println("il numero di pulsazioni ogni 10 secondi è troppo alto");
    System.out.println("in proporzione alla frequenza di bracciata");

    }

    if((BracciatePerMinuto >= 30) && (BracciatePerMinuto <= 40) && ((Pulsazioni >= 23) && (Pulsazioni <= 28)))
    {

    System.out.println("Hai svolto un allenamento ideale");
    System.out.println("associando ottimamente il numero di pulsazioni ogni 10 secondi");
    System.out.println("alla frequenza di bracciata");

    }

    if((BracciatePerMinuto >= 30) && (BracciatePerMinuto <= 40) && (Pulsazioni > 28))
    {

    System.out.println("Hai svolto un allenamento con un alto tasso di stress");
    System.out.println("il numero di pulsazioni ogni 10 secondi è troppo alto");
    System.out.println("in proporzione alla frequenza media di bracciata che hai tenuto");


    }


    if((BracciatePerMinuto > 40) && (Pulsazioni < 23))
    {

    System.out.println("Hai svolto un allenamento con basso tasso di stress");
    System.out.println("il numero di pulsazioni ogni 10 secondi è troppo basso");
    System.out.println("rispetto alla frequenza molto alta di bracciata che hai tenuto");

    }

    if((BracciatePerMinuto > 40) && ((Pulsazioni >= 23) && (Pulsazioni <= 28)))
    {

    System.out.println("Hai svolto un allenamento con medio tasso di stress");
    System.out.println("dovresti cercare di alzare il numero delle pulsazioni ogni 10 secondi");
    System.out.println("in proporzione all'alta frequenza di bracciata che hai tenuto");

    }

    if((BracciatePerMinuto > 40) && (Pulsazioni > 28))
    {

    System.out.println("Hai svolto un allenamento con elevato tasso di stress");
    System.out.println("hai privilegiato la velocità, tenendo alte");
    System.out.println("le pulsazioni e la frequenza di bracciata, consigliato");
    System.out.println("per allenamenti brevi e intesi");

    }


    }

    }

  2. #2

    ...continuo...

    CLASSE STORICO:

    import java.io.*;

    public class Storico {

    // vettore contenente gli allenamenti inseriti tramite il metodo Aggiungi
    private Allenamento allenamenti[];

    // contiene il numero di allenamenti archiviati
    int index;

    //
    // crea un nuovo Storico
    // massimo numero di allenamenti archiviabili = 10
    //
    public Storico() {
    allenamenti = new Allenamento[10];
    index = 0;
    }

    //
    // inserisce un nuovo allenamento nello Storico
    //
    public void Aggiungi(Allenamento param_all){
    allenamenti[index] = param_all;

    index++;
    }

    //
    // Stampa dettagli di tutti gli allenamenti
    //
    public void StampaTutti() throws IOException {

    for(int i=0; i<index; ++i){

    allenamenti[i].Stampa();
    }
    }

    //
    // Stampa dettagli di tutti gli allenamenti
    //
    public void StampaMedia()throws IOException {
    // inizializzazione varibili per calcolo medie
    // le medie vengono messe in una variabile Allenamento temporanea
    double l_BracciatePerOra = 0.0;
    double l_Velocità = 0.0;
    double l_MediaPerVasca = 0.0;
    double l_BracciatePerVasca = 0.0;
    double l_BracciatePerMinuto = 0.0;
    double l_Pulsazioni = 0.0;
    Allenamento a = new Allenamento();

    // calcolo medie
    for(int i=0; i<index; ++i){
    l_BracciatePerOra = l_BracciatePerOra + allenamenti[i].BracciatePerOra;
    l_Velocità = l_Velocità + allenamenti[i].Velocità;
    l_MediaPerVasca = l_MediaPerVasca + allenamenti[i].MediaPerVasca;
    l_BracciatePerVasca = l_BracciatePerVasca + allenamenti[i].BracciatePerVasca;
    l_BracciatePerMinuto = l_BracciatePerMinuto + allenamenti[i].BracciatePerMinuto;
    l_Pulsazioni = l_Pulsazioni + allenamenti[i].Pulsazioni;
    }
    a.BracciatePerOra = l_BracciatePerOra/index;
    a.Velocità = l_Velocità/index;
    a.MediaPerVasca = l_MediaPerVasca/index;
    a.BracciatePerVasca = l_BracciatePerVasca/index;

    // conversione da double a int
    Double l_Double = l_BracciatePerMinuto/index;
    a.BracciatePerMinuto = l_Double.intValue();

    // conversione da double a int
    l_Double = l_Pulsazioni/index;
    a.Pulsazioni = l_Double.intValue();

    System.out.println("");
    System.out.println("Stampa medie allenamenti");
    System.out.println("");
    a.Stampa();

    }


    }



    Allora, il programma funziona correttamente, ora arrivano le domande:
    in fondo alla classe main potete farmi la modifica in modo che:
    quando ti viene chiesto "Vuoi ricominciare da capo?" se tu gli digiti un comando diverso da " s " o " n " ti dica "errore nella scrittura, vuoi ricominciare da capo? (s/n) ".
    Altra cosa, per complicare un po' il programma ho creato una nuova classe denominata "Lettura da Tastiera" l'ho praticamente ripresa dal vostro forum, solo che come faccio a usarla e richiamarla ogni volta nel programma, mi aiutate per favore? La classe che ho creato è questa:

    import java.io.*;
    import java.util.StringTokenizer;

    public class LetturaTastiera {
    private static InputStreamReader is = new InputStreamReader( System.in );
    private static BufferedReader br = new BufferedReader( is );
    private static StringTokenizer st;

    public static String leggiStringa() {
    String s = "";

    try {
    s = br.readLine();
    } catch (Exception e) { e.printStackTrace(); }

    return s;
    }

    public static int leggiIntero() {
    int i = 0;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = Integer.parseInt( st.nextToken() );
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static float leggiFloat() {
    float i = 0f;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = Float.parseFloat( st.nextToken() );
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static double leggiDouble() {
    double i = 0;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = Double.parseDouble( st.nextToken() );
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static char leggiCarattere() {
    char i = (char) 0;

    try {
    i = (br.readLine()).charAt(0);
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static long leggiLong() {
    long i = 0L;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = Long.parseLong( st.nextToken() );
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static short leggiShort() {
    short i = (short) 0;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = Short.parseShort( st.nextToken() );
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static byte leggiByte() {
    byte i = (byte) 0;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = Byte.parseByte( st.nextToken() );
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }

    public static boolean leggiBoolean() {
    boolean i = false;

    try {
    String tmp = br.readLine();
    st = new StringTokenizer(tmp);
    i = new Boolean( st.nextToken() ).booleanValue();
    } catch (Exception e) { e.printStackTrace(); }

    return i;
    }
    }


    Ecco... cioe' dovrei fare in modo che nel main e nelle altre classi, ci fossero richiami a questa classe ogni volta che c'è la lettura da tastiera...potete aiutarmi?

    Se avete altre idee o spunti da aggiungere, fatevi avanti, e createli!! Io ho un esame il 29 mattina quindi DOMANI L'ALTRO MATTINA AIUTOOOOOOOOOOOOOOOOOOOOO... vi prego, fatevi avanti, e contattatemi pure su msn ( nflorenzano@hotmail.it ) .. ringrazio chi avra' spirito di altruismo, oltre che piacere nel coltivare la propria passione aiutando gli inesperti come me... grazie

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ...continuo...

    Originariamente inviato da niccoflo
    in fondo alla classe main potete farmi la modifica in modo che:
    quando ti viene chiesto "Vuoi ricominciare da capo?" se tu gli digiti un comando diverso da " s " o " n " ti dica "errore nella scrittura, vuoi ricominciare da capo? (s/n) ".
    Te lo spiego a parole ... poi la modifica la fai tu.
    Vedo che hai fatto il piccolo loop per la richiesta s/n, che si ripete finché non è stato inserito "s" o "n" e così tecnicamente andrebbe già bene.
    Se però vuoi che il messaggio sia differente dopo che il primo input non è corretto, puoi farlo in diversi modi. Uno semplice è, in sequenza:
    a) Stampi il primo testo di richiesta
    b) Chiedi la riga in input
    c) Fai un while (non do-while!) in cui si deve entrare solo se l'input non è corretto
    d) Nel corpo del while stampi il secondo testo di richiesta e poi chiedi la riga in input. Questo ciclo si ripeterà finché non hai inserito s/n e presentando il secondo testo di richiesta.

    Si poteva fare anche in un altro modo, mantenendo il do-while che hai scritto tu, facendo in modo di cambiare il reference alla stringa di richiesta.

    Originariamente inviato da niccoflo
    Altra cosa, per complicare un po' il programma ho creato una nuova classe denominata "Lettura da Tastiera" l'ho praticamente ripresa dal vostro forum, solo che come faccio a usarla e richiamarla ogni volta nel programma, mi aiutate per favore?
    Non capisco il tuo dubbio (e la difficoltà) .... i metodi sono tutti statici, quindi basta invocare il metodo statico semplicemente con es:

    double d = LetturaTastiera.leggiDouble();

    E comunque questa classe LetturaTastiera è tutt'altro che ben fatta. L'uso di StringTokenizer è solo per eliminare gli spazi attorno al token. Ma è superfluo ... basterebbe usare trim() di String per eliminare tali spazi. Che tra l'altro sarebbe anche più "robusto". Se uno ti inserisce la riga "...spazi...123...spazi...456" tu con StringTokenizer prenderesti solo il primo token cioè 123. L'altro 456 sarebbe ignorato. Se invece fai il trim della stringa, l'input risulterebbe errato per i parseXXX(), quindi il controllo è più "robusto".

    E inoltre vedo che ogni metodo cattura la eccezione (quella eventualmente lanciata dai parseXXX()) e fa banalmente un print dello stack trace. Non è il massimo .... se viene lanciato un NumberFormatException vuol dire che l'input è malformato. Ora .. hai diverse possibilità più intelligenti: a) Far ripetere l'input (restando in quel metodo di LetturaTastiera) oppure b) Far "uscire" la eccezione dal metodo (in modo che sia il chiamante a decidere cosa fare) oppure c) Far ritornare un valore di default (che sarebbe anche più intelligente passare al metodo stesso).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    La prossima volta, quando posti del codice (specialmente se è così lungo) usa i tag [code] e [/code] così il codice rimane indentato, leggibile e non si fatica a capirlo.


    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

  5. #5

    Re:

    @ andbin: siccome non sono veramente esperto, potresti scrivermi le modifiche tu direttamente nel programma, oppure aggiungermi su msn ne parliamo (nflorenzano@hotmail.it) ?
    Grazie, e scusa!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re:

    Originariamente inviato da niccoflo
    @ andbin: siccome non sono veramente esperto
    Per quel ciclo che vuoi fare non è questione di essere "esperti" ..... hai già scritto un po' di codice e hai usato cicli do-while, switch, try-catch e altro .... non mi pare difficile.

    Ripeto con pseudo-codice:

    codice:
    print "Vuoi ricominciare da capo? (s/n)"
    str = leggi_input
    while (se_str_non_valido)
    {
        print "Errore nella scrittura, vuoi ricominciare da capo? (s/n)"
        str = leggi_input
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Perfetto, e per la lettura da tastiera? puoi farmi le modifiche che avevi detto?
    Thanks...

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.