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

    [JAVA] Mi corregete un programmino ?

    Salve a tutti !
    Sto cercando di imparare il JAVA e mi sono dedicato alla stesura di un codice che risolvi il seguente problema :

    "Realizzare un programma che accetti una lista di nomi in input e che visualizzi come output a video, uno dei nomi scelto casualmente dall'elaboratore. "

    Diciamo che questa è la traccia che mi sono assegnato ! :rollo:

    Ho buttato sta specie di codice mi dite quanto sto
    rovinato da 1 a 10 ? mi dareste delle diritte ?

    [code]
    import java.lang.System;
    import java.io.DataInputStream;
    import java.util.Random;
    class program {
    public static void main (String args[]) {
    int i=0,s,n,z;
    boolean continua=true;
    String nomi[];
    DataInputStream keyboardinput;
    System.out.print("Inserisci l'elenco dei nomi: ");
    System.out.print("Premi X per terminare la lista!");
    keyboardinput = new datainputstream(System.in);
    do {
    continua=true;
    nomi[i]=keyboardinput.readln();
    if (nomi[i] = "X") continua=false;
    else i=i+1;
    n=i; }
    while (continua=true) ;
    System.out.print("Il nome scelto dal computer è: ", nomi[randomname()]);
    }
    }
    }
    //Questa l'ho fatta per generare un numero a caso tra 1 e n
    int Randomname() {
    int s=random.nextInt();
    if (s<0) s=0-s;
    return s%n;
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Nel tuo codice ci sono molti errori. Vediamo di elencarli in ordine di comparsa nel codice:
    codice:
    keyboardinput = new datainputstream(System.in);
    
    // Correzione: DataInputStream va con le maiuscole
    
    keyboardinput = new DataInputStream(System.in);
    
    ------------------------------------------------------
    
    continua=true;   // questo è inutile
    
    ------------------------------------------------------
    nomi[i]=keyboardinput.readln();
    
    // correzione: readln() non esiste, esisterebbe readLine(),
    // ma è deprecato: dovresti utilizzare un BufferedReader.
    
    nomi[i] = keyboardinput.readLine();
    
    ------------------------------------------------------
    
    if (nomi[i] = "X") continua=false;
    
    // correzione: il confronto andrebbe con due simboli di =
    // ma per gli oggetti si usa equals().
    
    if ( nomi[i].equals("X") ) continua = false;
    
    ------------------------------------------------------
    
    while (continua=true) ;
    
    // correzione: il confronto si fa con due simboli di =
    // anche se è preferibile evitarli quando si ha a che
    // fare con variabili o espressioni booleane:
    
    while (continua);  // al massimo: while (continua == true);
    
    ------------------------------------------------------
    
    System.out.print("Il nome scelto dal computer è: ", nomi[randomname()]); 
    
    // correzione: se dichiari un metodo con la maiuscola,
    // lo devi richiamare con la maiuscola
    
    System.out.print("Il nome scelto dal computer è: ", nomi[Randomname()]);
    
    ------------------------------------------------------
    
    int Randomname() {
    int s=random.nextInt();
    if (s<0) s=0-s;
    return s%n;
    }
    
    // correzione: i metodi vanno messi all'interno della classe e non all'esterno
    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
    Se non ti interessa la retrocompatibilita', Java 1.5 ha introdotto la classe Scanner per leggere da "standard input".
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  4. #4

    Grazie tante

    Grazie Tante ..... ma ancora non va

    Io uso come EDITOR il Java Builder X della Borland
    quando scrivo il programma mi da i seguenti errori :

    1) la classe java.util.random è stranamente di coloro grigio chiaro ;
    2) mi sottolinea le due parentesi tonde della mia funzione
    Randomname() ovunque io la metti, e se mi posiziono sopra con il mouse mi dice che " ; expected " ma a me non risulta che ci vuole perchè l'istruzione non è finita !

    3)e poi mi da errori sulle ultime 3 parentesi graffe una dice che è While expected e l'altra dice illegal start expression


    VEDI ? ho apportato le tue correzioni !



    codice:
    import java.lang.System;
    import java.io.DataInputStream;
    import java.util.Random;
    class program {
         public static void main (String args[]) {
       int i=0,s,n,z;
       int Randomname() {
          int s=random.nextInt();
          if (s<0) s=0-s;
          return s%n;
        }
       boolean continua=true;
       String nomi[];
       DataInputStream keyboardinput;
       System.out.print("Inserisci l'elenco dei nomi: ");
       System.out.print("Premi X per terminare la lista!");
       keyboardinput = new DataInputStream(System.in);
       do {
         continua=true;
         nomi[i]=keyboardinput.readline();
         if (nomi[i].equals("X")) continua=false;
         else i=i+1;
         n=i; 
         while continua };
       Randomname();
       System.out.print("Il nome scelto dal computer è: ", nomi[Randomname()]);
       }
     }
    }

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Effettivamente non mi ero accorto che gli errori erano proprio così tanti. Faccio prima a scriverti il codice corretto, poi te lo guardi (non lo provo, se non va riposta):
    codice:
    import java.io.DataInputStream;
    import java.util.Random;
    class program {
       int Randomname() {
          int s = random.nextInt();
          if (s<0) s=0-s;
          return s%n;
       }
    
       public static void main (String args[]) {
          int i=0,s,n,z;
          boolean continua=true;
          String nomi[];
          DataInputStream keyboardinput;
          System.out.print("Inserisci l'elenco dei nomi: ");
          System.out.print("Premi X per terminare la lista!");
          keyboardinput = new DataInputStream(System.in);
          do {
             continua=true;
             nomi[i]=keyboardinput.readLine();
             if (nomi[i].equals("X")) continua=false;
             else i=i+1;
             n=i; 
          } while ( continua );
          System.out.print("Il nome scelto dal computer è: ", nomi[Randomname()]);
       }
    }
    PS: Se sei agli inizi (e così mi sembra) abbandona immediatamente il JBuilder e comincia a scrivere il codice utilizzando il Blocco Note (o altro editor)... compila ed esegui da riga di comando, altrimenti non imparerai mai a programmare in Java: garantito!


    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

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Eh sì, mi erano proprio sfuggite un bel po' di cosette:
    codice:
    import java.io.DataInputStream;
    import java.util.Random;
    class program {
       static int Randomname(int n) {
          int s = ( new Random(System.currentTimeMillis()) ).nextInt();
          if (s<0) s=0-s;
          return s%n;
       }
    
       public static void main (String args[]) throws Exception {
          int i=0,s,n,z;
          boolean continua=true;
          String nomi[] = new String[100];
          DataInputStream keyboardinput;
          System.out.print("Inserisci l'elenco dei nomi: ");
          System.out.print("Premi X per terminare la lista!");
          keyboardinput = new DataInputStream(System.in);
          do {
             continua=true;
             nomi[i]=keyboardinput.readLine();
             if (nomi[i].equals("X")) continua=false;
             else i=i+1;
             n=i; 
          } while ( continua );
          System.out.print("Il nome scelto dal computer è: " + nomi[Randomname(n)]);
       }
    }
    Come vedi ho applicato molte modifiche:

    1) Il metodo Random() deve essere statico perchè lo richiami da un contesto statico (il main);

    2) Se vuoi utilizzare la classe Random, devi prima crearne un oggetto;

    3) Ho aggiunto un throw Exception al main perchè il metodo readLine() può generare eccezioni;

    4) Prima di utilizzare gli array, questi vanno inizializzati e quindi dimensionati. Se vuoi avere un programma che utilizza array dinamici devi utilizzare un Vector;

    5) Devi passare la variabile n al metodo Random() altrimenti lui non la vede e non sa cosa sia;

    6) Il metodo print() della classe System prende un parametro alla volta. Non puoi quindi operare come in Pascal, utilizzando la virgola per separare più espressioni, ma devi trasformare il tutto in un'unica espressione che dia un oggetto String, mediante la concatenazione: infatti ho sostituito la virgola con un simbolo +.

    Mi pare di non aver tralasciato niente... il System.currentTimeMillis() restituisce il valore corrente del timer di sistema e mi serve solo per inizializzare il seme del generatore di numeri casuali.

    PS: dovresti ottenere dei worning perchè fai uso di metodi deprecati, ma questo te l'ho già spiegato nel mio primo post.


    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

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 © 2024 vBulletin Solutions, Inc. All rights reserved.