Esercizio java vettori

di il
49 risposte

49 Risposte - Pagina 2

  • Re: Esercizio java vettori

    Ho provato a far così e non va nemmeno:
    
    class Libro {
        private String titolo;
        private int pagine;
        public void leggiDati(int i) {
          
       
          Scanner scanner = new Scanner (System.in);
          
             System.out.print("Inserisici il titolo del libro "+(i+1)+": ");
             String titolo = scanner.nextLine ();
             System.out.print("Inserisci il numero di pagine: ");
             int pagine  = scanner.nextInt();      
          }
          public int numpag()
          {
             return pagine;
             
          }
    
    	public String getTitolo(int i)
            {
    		return titolo;
    	}
    
    	public int getPag(int i)
            {
    		return pagine;
    	}
    	public void stampaLibri()
    	{
    		System.out.print(getTitolo()+"   "+getPag());
    
    	}
    public class ProgLibri {
    
       public static void main(String[] args) {
          int i=0;
          //Libro maggiore; lo faccio dopo
          Libro libri[] = new Libro[3];
          for (i=0; i<libri.length; i++)
          {
             libri[i]= new Libro();
             libri[i].leggiDati(i);
            System.out.println("\n"+libri[i].getTitolo(i)+"    pagine: "+libri[i].getPag(i));
             
          }
    in pratica voglio memorizzare i libri nell'array e poi voglio che mi venga stampata la lista. Con la teoria fino ad ora affrontata dovrei riuscire senza troppe complicazioni....
    Potrebbe dipendere dal fatto che non utilizzo i seguenti per leggere i titoli da tastiera???
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(input);
  • Re: Esercizio java vettori

    trixy ha scritto:


    Ho provato a far così e non va nemmeno:
    
    class Libro {
        private String titolo;
        private int pagine;
        public void leggiDati(int i) {
          
       
          Scanner scanner = new Scanner (System.in);
          
             System.out.print("Inserisici il titolo del libro "+(i+1)+": ");
             String titolo = scanner.nextLine ();
             System.out.print("Inserisci il numero di pagine: ");
             int pagine  = scanner.nextInt();      
          }
          [ ... ]
    
    Intanto, non è affatto buono che nella classe Libro fai i/o verso l'utente. Libro dovrebbe solo modellare un libro e basta. Quindi:
    - campi
    - costruttore/i (se necessario)
    - metodi getter/setter
    - altro (es. toString() già citato prima)

    stop. Poi in ProgLibri fai quello che vuoi: crei lo Scanner, leggi, crei gli oggetti Libro, ecc...

    trixy ha scritto:


    Potrebbe dipendere dal fatto che non utilizzo i seguenti per leggere i titoli da tastiera???
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(input);
    No, non c'entra nulla, è solo un modo alternativo a Scanner per leggere da standard-input.
  • Re: Esercizio java vettori

    Molto molto bene... Finalmente sono riuscito a fare quello che intendevo fare. Ho anche creato due file: uno con costruttori,getter e setter e un altro con tutta la gestione dell'i/o.
    Tanto per continuare a stressarvi: esiste un metodo che renda più bella questa visualizzazione?
    Titolo: Magica Emy 400 pagine
    Titolo: Blue 34 pagine
    Titolo: Harry Potter 15 pagine
    In pratica vorrei che l'inizio della colonna del numero di pagine risultasse allineata.
  • Re: Esercizio java vettori

    trixy ha scritto:


    In pratica vorrei che l'inizio della colonna del numero di pagine risultasse allineata.
    A livello base c'è la formattazione delle stringhe presente da Java 5.
    Vedi i printf/format di PrintStream
  • Re: Esercizio java vettori

    Però mi pare di capire dalla guida che se un ciclo for con un system.out.printf, la formattazione non funziona.
    Infatti applicando "%15s" alla stringa del numero di pagine, quest'ultime non vengono mai allineate perchè la lunghezza del tittolo è diversa per ciascuna.O sbaglio?
  • Re: Esercizio java vettori

    trixy ha scritto:


    Però mi pare di capire dalla guida che se un ciclo for con un system.out.printf, la formattazione non funziona.
    Infatti applicando "%15s" alla stringa del numero di pagine, quest'ultime non vengono mai allineate perchè la lunghezza del tittolo è diversa per ciascuna.O sbaglio?
    La formattazione con spazi di allineamento a destra la devi applicare tu al titolo innanzitutto. Poi eventualmente anche al numero di pagine, se vuoi es. che siano allineate a destra.
  • Re: Esercizio java vettori

    Ho provato a fare diverse prove e cercare su internet esempi simili ma non trovo una soluzione che mi soddisfa.
    Mettendo questo:
    System.out.println("\n"+libri.getTitolo()+"\t\t"+libri.getPag()+" pagine");
    ottengo ad esempio:
    Titolo: Harry Potter 345 pagine
    Titolo: IO 180 pagine.
    Invece voglio ottenere:
    Titolo: Harry Potter 345 pagine
    Titolo: IO 180 pagine

    Ho prvato con %s sia positivo che negativo ma non ottengo quello che voglio.
  • Re: Esercizio java vettori

    Nemmeno qui sul forum stampa come dico io,però nell'anteprima si.
    In pratica il numero di pagina del primo e del secondo titolo devono essere allineati dopo un certo numero di spazi bianchi a prescindere dalla lunghezza del titolo
  • Re: Esercizio java vettori

    System.out.format("Titolo: %-20s %4d pagine%n", titolo, numpag);
    Aumenta quel 20 a es. 30 o come vuoi per un allineamento "ragionevole" che non faccia sforare.
    Nota 1: format o printf a scelta ... sono uguali
    Nota 2: %n è il newline
  • Re: Esercizio java vettori

    Esiste in JAVA qualcosa che mi permetta di dare in output un certo messaggio se e solo se tutti gli elementi del vettore non soddisfano la condizione?
    Esempio:ho un vettore di 8 studenti.Se tutti gli 8 studenti hanno età<21 stampa nessun idoneo
  • Re: Esercizio java vettori

    trixy ha scritto:


    Esiste in JAVA qualcosa che mi permetta di dare in output un certo messaggio se e solo se tutti gli elementi del vettore non soddisfano la condizione?
    Con lambda expression e Stream API di Java 8 sì, lo fai e in maniera "funzionale" (senza cicli e senza variabili extra, a parte il parametro della lambda).

    Altrimenti ti fai un metodino con 1 ciclo ... è banale.
  • Re: Esercizio java vettori

    Io ho fatto così:
    for(i=0; i<stud.length; i++)
    {
    if (stud.getAnni()<21)
    System.out.print("nessun idoneo")}
    Ma così mi stampa tanti messaggi quanti sono gli studenti con età <21
  • Re: Esercizio java vettori

    trixy ha scritto:


    Io ho fatto così:
    for(i=0; i<stud.length; i++)
    {
    if (stud[i].getAnni()<21)
    System.out.print("nessun idoneo")}
    Ma così mi stampa tanti messaggi quanti sono gli studenti con età <21
    Certo, infatti non è così che va fatto. O usi una variabile boolean, oppure fai un metodo a parte che restituisce subito es. false appena trovi un valore che non soddisfa la condizione.
    Forza ..
  • Re: Esercizio java vettori

    Ma il metodo a parte lo dovrei creare nella classe studente? Anche se in questo modo mi smebra più complicato.
    Il caso che ne trova uno o più che non soddisfano la condizione già l'ho fatto e funziona. Mi manca il caso in cui il vettore memorizza otto età inferiori a 21 e allora mi manda un unico messaggio in uscita.
  • Re: Esercizio java vettori

    trixy ha scritto:


    Ma il metodo a parte lo dovrei creare nella classe studente? Anche se in questo modo mi smebra più complicato.
    Il caso che ne trova uno o più che non soddisfano la condizione già l'ho fatto e funziona. Mi manca il caso in cui il vettore memorizza otto età inferiori a 21 e allora mi manda un unico messaggio in uscita.
    Anche senza metodo a parte: variabile boolean inizialmente a true; ciclo for, if (nonsoddisfa), metti a false
Devi accedere o registrarti per scrivere nel forum
49 risposte