Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53

    assegnare valori ad array (java)

    ho fatto questo semplice programma :

    codice:
    import javax.swing.JOptionPane;
    public class borsamain {
    
    	public static void main(String[] args) {
    	int borsasize=0;
    	int i =0;
    	int prov = 0;
    	int stop= 2;
    	String [] borsa = new String [5];
    	
    	
    	while( stop > prov){
    		String m = JOptionPane.showInputDialog("inserire il tipo di moneta da mettere nella borssa");
    		stop = Integer.parseInt(JOptionPane.showInputDialog("inserire 0 se è l'ultima moneta da mettere nella borsa altrimenti qualsiasi altro numero positivo"));
    		borsa[i] = m;
    		i++;
    		borsasize++;
    	}
    	for(int j=0; j<=borsasize; j++){
    	System.out.println( borsa[i]);
    	j++;
    	}
    	}
    
    }
    assegno "m" all'array (o almeno vorrei fare questo), quando eseguo il programma come risultati però mi da "null" non capisco se l'errore sia nell'assegnazione del valore o nel println e in cosa consiste

  2. #2
    Ciao,
    for(int j=0; j<=borsasize; j++){
    System.out.println( borsa[i]);
    j++;
    }

    borsa[j] non borsa[i]

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ci sono diversi problemi, quello in particolare che non ti stampa è dovuto probabilmente a:
    System.out.println(borsa[i]); => vedi che hai scritto "i" mentre il ciclo for è basato su "j"

    A parte questo il ciclo while è fatto male e non controlli che non venga superato il limite di 5, cioè quanto è grande l'array.

    In pratica non ti conviene usare un "while" ma un for che va da 0 a 5 e nel caso uno immetta 0 esci prima.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Aggiungo anche questa
    codice:
    for(int j=0; j<=borsasize; j++){
    Se hai inserito "borsasize" elementi nell'array, l'indice andrà da 0 a (borsasize-1). Quindi dovresti modificare la condizione di uscita dal ciclo for, altrimenti incorrerai in una ArrayIndexOutOfBoundsException.

    codice:
    for(int j=0; j<borsasize; j++){
    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
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53
    Originariamente inviato da c0der
    Ci sono diversi problemi, quello in particolare che non ti stampa è dovuto probabilmente a:
    System.out.println(borsa[i]); => vedi che hai scritto "i" mentre il ciclo for è basato su "j"

    A parte questo il ciclo while è fatto male e non controlli che non venga superato il limite di 5, cioè quanto è grande l'array.

    In pratica non ti conviene usare un "while" ma un for che va da 0 a 5 e nel caso uno immetta 0 esci prima.

    ciao forse non ho capito bene quello che vuoi dire ma usando il for uno dovrebbe contare prima quanti dati deve inserire poi usare quel dato per il for giusto??? ed io qesto vorrei evitarlo vorrei che facesso tutto in automatico

  6. #6
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Ciao,
    non hai bisogno di contare niente perchè sai già che non potrai inserire più di 5 elementi dato che hai creato il vettore borsa lungo 5. Il tuo programma però non ha nessuna condizione che impedisca all'utente di inserire più di 5 elementi.

    Se il tuo programma dovesse prendere in input al massimo 5 monete e terminare nel caso l'utente inserisca lo 0, dovresti scrivere il tuo ciclo così:
    codice:
    while (stop != prov && i < borsa.length){
         .........
    }
    Un piccolo consiglio: prendi l'abitudine di non dichiarare mai le variabili all'interno di un ciclo come hai fatto tu con la m; in questo modo continui a creare e distruggere la variabile ad ogni iterazione. Creala sempre all'esterno. Inoltre non ne hai bisogno, potresti semplicemente scrivere così:
    codice:
           int i = 0;
           while (stop != prov && i < borsa.length){
           borsa[i] = JOptionPane.showInputDialog(".....");
           i++;
           .........
           }
    A proposito di borsasize:
    -la convenzione java dice di usare caratteri maiuscoli per separare un nome formato da piu parole; in questo caso borsaSize. So che sembra una cavolata ma aiuta a rendere più leggibile il codice.
    -non ti serve a molto in questo caso. Avresti potuto semplicemente mettere nel for che usi per stampare, una condizione che escluda gli elementi del vettore che non hai riempito (nulli).
    codice:
          for (int j = 0; j<borsa.length; j++){
                if (borsa[j] != null){
                     System.out.println(borsa[j]);
                }
          }
    Nel caso non sappia a priori quante monete l'utente andrà ad inserire, dovresti usare un ArrayList invece che un vettore.
    Te lo scrivo usando gli ArrayList ma se ancora non li conosci dai un occhiata alla documentazione ufficiale o in alternativa usa il buon vecchio google.
    codice:
          int prov = 0;
          int stop = 2;
          ArrayList<String> borsa = new ArrayList<>();
          while (stop != prov){
                 borsa.add(JOption.showInputDialog("..."));
                 stop = Integer.parseInt(JOption.showInputDialog("..."));
          }
          for(int j = 0; j < borsa.size(); j++){
               System.out.println(borsa.get(j));
          }
    Comunque anche io non sono un esperto quindi prendi tutto quello che ho detto come un consiglio

  7. #7
    ArrayList<String> borsa = new ArrayList<>();
    Se definisci l'ArrayList coi generics devi istanziarla coi generics

    codice:
     ArrayList<String> borsa = new ArrayList<String>();

  8. #8
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Se definisci l'ArrayList coi generics devi istanziarla coi generics
    è proprio quello che ho fatto. Ho solo abbreviato la sintassi usando la diamond form introdotta in java 1.7

  9. #9
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Originariamente inviato da Nikopol
    è proprio quello che ho fatto. Ho solo abbreviato la sintassi usando la diamond form introdotta in java 1.7
    Giusto, da 1.7 quella sintassi è correttissima

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

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.