Visualizzazione dei risultati da 1 a 8 su 8

Discussione: problema con i vettori

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17

    problema con i vettori

    devo realizzare un programma che chiede all’utente di specificare quanti nomi vuole inserire, creo un vettore con tale numero di elementi, chiede all’utente di inserire i nomi nel vettore, e li visualizza tutti in maiuscolo, togliendo tutti gli spazi presenti all’inizio o alla fine dei nomi.

    a me sembra corretto ma mi da un errore che non riesco a capire neanche col debugger..si pianta..non capisco il problema

    codice:
    
    public class Esercizio27 {
    
       
        public static void main(String[] args) {
            Scanner reader = new Scanner(System.in);
    
            String risposta;
            int NumeroElementi;
            String frase = "ciao";
    
            System.out.print("Inserisci il numero di nomi che vuoi inserire nel vettore : ");
            risposta = reader.nextLine();
            NumeroElementi = Integer.parseInt(risposta);
    
            String nomi[] = new String[NumeroElementi];
    
            for (int i = 0; i < NumeroElementi; i++) {
                System.out.print("Inserisci il nome in posizione  " + i + ": ");
                risposta = reader.nextLine();
                frase = nomi[i];
                frase = frase.toUpperCase();
                frase = frase.trim();
                System.out.println(frase);
    
            }
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Innanzitutto hai dimenticato l'importazione di Scanner (import java.util.Scanner) , ma il vero porblema non è questo , questo sarà stato magari un errore di distrazione.

    Avviando il programma si incappa in un NullPointerException alla riga in cui fai
    codice:
    frase = frase.toUpperCase();
    questo perchè stai invocando il metodo "toUpperCase ()" di String a un oggetto "null" , infatti prima hai assegnato:
    codice:
    frase = nomi[i];
    e infatti nomi [i] , non avendo mai inserito niente in esso avrà il valore null

    C'è un po' di confusione a livello logico in quello che fai all'interno del "for" riguarda e vedi se riesci a correggere da solo

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    [QUOTE]Originariamente inviato da zipangulu
    Innanzitutto hai dimenticato l'importazione di Scanner (import java.util.Scanner) , ma il vero porblema non è questo , questo sarà stato magari un errore di distrazione.

    Avviando il programma si incappa in un NullPointerException alla riga in cui fai
    codice:
    frase = frase.toUpperCase();
    questo perchè stai invocando il metodo "toUpperCase ()" di String a un oggetto "null" , infatti prima hai assegnato:
    codice:
    frase = nomi[i];
    e infatti nomi [i] , non avendo mai inserito niente in esso avrà il valore null

    C'è un po' di confusione a livello logico in quello che fai all'interno del "for" riguarda e vedi se riesci a correggere da solo

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    emmm no , non ci siamo ancora!

    nel primo che hai postato oggi , hai aggiustato solo l'import dentro il for a livello logico non hai aggiustato niente...in pratica la parte che non ha senso è:
    codice:
    risposta = nomi[i]; 
    nomi[i] = risposta.toUpperCase(); 
    nomi[i] = risposta.trim();
    l'errore più grande sta nella prima riga : tu devi copiare il contenuto di risposta in nomi [i] e non il contrario...
    poi (a meno che tu non voglia che dentro l'array i nomi stiano come inseriti e ingrandisci e togli gli spazi solo alla stringa temporanea "risposta" e non quindi alla stringa salvata nell'array) io andrei a richiamare il "toUpperCase ()" e il "trim ()" prima di copiare in nomi [i]
    e poi infine stamperei direttamente il contenuto di array [i]

    Il secondo codice mi sembra ancora più insensato...in esso in pratica non ti servi nemmeno dell'array nomi , il chè lo rende inutile , potrebbe anche non starci...

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    emmm no , non ci siamo ancora!

    nel primo che hai postato oggi , hai aggiustato solo l'import dentro il for a livello logico non hai aggiustato niente...in pratica la parte che non ha senso è:
    codice:
    risposta = nomi[i]; 
    nomi[i] = risposta.toUpperCase(); 
    nomi[i] = risposta.trim();
    l'errore più grande sta nella prima riga : tu devi copiare il contenuto di risposta in nomi [i] e non il contrario...
    poi (a meno che tu non voglia che dentro l'array i nomi stiano come inseriti e ingrandisci e togli gli spazi solo alla stringa temporanea "risposta" e non quindi alla stringa salvata nell'array) io andrei a richiamare il "toUpperCase ()" e il "trim ()" prima di copiare in nomi [i]
    e poi infine stamperei direttamente il contenuto di array [i]


    Il secondo codice mi sembra ancora più insensato...in esso in pratica non ti servi nemmeno dell'array nomi , il chè lo rende inutile , potrebbe anche non starci...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    Originariamente inviato da zipangulu
    emmm no , non ci siamo ancora!

    nel primo che hai postato oggi , hai aggiustato solo l'import dentro il for a livello logico non hai aggiustato niente...in pratica la parte che non ha senso è:
    codice:
    risposta = nomi[i]; 
    nomi[i] = risposta.toUpperCase(); 
    nomi[i] = risposta.trim();
    l'errore più grande sta nella prima riga : tu devi copiare il contenuto di risposta in nomi [i] e non il contrario...
    poi (a meno che tu non voglia che dentro l'array i nomi stiano come inseriti e ingrandisci e togli gli spazi solo alla stringa temporanea "risposta" e non quindi alla stringa salvata nell'array) io andrei a richiamare il "toUpperCase ()" e il "trim ()" prima di copiare in nomi [i]
    e poi infine stamperei direttamente il contenuto di array [i]


    Il secondo codice mi sembra ancora più insensato...in esso in pratica non ti servi nemmeno dell'array nomi , il chè lo rende inutile , potrebbe anche non starci...
    codice:
    package Esercizi_3A_info;
    
    import java.util.Scanner;
    
    
    public class Esercizio27 {
    
        public static void main(String[] args) {
            Scanner reader = new Scanner(System.in);
    
            String risposta;
            int NumeroElementi;
            String frase="";
    
            System.out.print("Inserisci il numero di nomi che vuoi inserire nel vettore : ");
            risposta = reader.nextLine();
            NumeroElementi = Integer.parseInt(risposta);
    
            String nomi[] = new String[NumeroElementi];
    
            for (int i = 0; i < NumeroElementi; i++) {
                System.out.print("Inserisci il nome in posizione  " + i + ": ");
                risposta = reader.nextLine();
                nomi[i]=risposta;
                nomi[i]=nomi[i].toUpperCase();
                nomi[i]=nomi[i].trim();
                System.out.println("la parola inserita è  "+nomi[i]);
    
            }
        }
    }
    risposta = nomi[i] non so come mi sia saltata in mente questa pazzia lol ..dovrebbe essere corretto adesso

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Si ora è corretto...magari io avrei fatto una cosa un po' più "rapida":

    invece che scrivere:
    codice:
    nomi[i]=risposta;
    nomi[i]=nomi[i].toUpperCase();
    nomi[i]=nomi[i].trim();
    avrei scritto:
    codice:
    nomi [i] = risposta.toUpperCase ().trim ();
    scrivi tre righe in una evitando passaggi intermedi , ma si tratta solo di un aspetto magari "più elegante" e meno "accademico" tutto qui

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    Originariamente inviato da zipangulu
    Si ora è corretto...magari io avrei fatto una cosa un po' più "rapida":

    invece che scrivere:
    codice:
    nomi[i]=risposta;
    nomi[i]=nomi[i].toUpperCase();
    nomi[i]=nomi[i].trim();
    avrei scritto:
    codice:
    nomi [i] = risposta.toUpperCase ().trim ();
    scrivi tre righe in una evitando passaggi intermedi , ma si tratta solo di un aspetto magari "più elegante" e meno "accademico" tutto qui
    A non sapevo si potesse fare..il professore non c'è l'avevo detto ..bello sapere che posso unire vari metodi...

    Grazie di tutto..

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.