Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Stampare numeri pari da 1 a 100 con cicli

    Ciao ragazzi!
    Chiedo di scusarmi se avrò molti dubbi. Entro sul forum molto raramente. Il problema penso sia nel fatto che non riesco a risolvere certi problemi per alcuni motivi personali(come la cattiva concentrazione dovuta dall'ansia ... ecc), ma non sono stupido.
    Mi sono preso un esercizio da fare oggi, ma non ci sono riuscito a risolverlo, per ottenere un risultato.

    Ecco il problema:

    Stampare i numeri pari da 1 a 100:
    * usando l'istruzione while(){},
    * usando l'istruzione do{}while(),
    * usando il ciclo for.

    La mia risoluzione:
    codice:
    package pari_1_100;
    
    public class NumeriPari {
    
        private int numero=0, numeriPari[];
        final int pari = 50;
    
        public NumeriPari(){
            numeriPari = new int[pari];
        }
    
        public int[] StampaConWhile(){
            int i = 0;
            while(i<=pari){
                numero=numero+2;            
                numeriPari[i] = numero;
                i++;
            }
        return numeriPari;
        }
    
        public int[] StampaConDo_While(){
            int i = 0;
            do{
                i++;
                numero=numero+2;
                numeriPari[i]=numero;
            }while(i<=pari);
        return numeriPari;
        }
    
        public int[] StampaConFor(){
            for(int i = 0;i <= pari; i++){
                numero=numero+2;
                numeriPari[i]=numero;
            }
        return numeriPari;
        }
    
    }
    codice:
    package pari_1_100;
    
    public class Main {
    
        public static void main(String[] args) {
            NumeriPari np = new NumeriPari();
            System.out.println(np.StampaConWhile());
            System.out.println(np.StampaConDo_While());
            System.out.println(np.StampaConFor());
        }
        
    }
    Il programma mi da errore di runtime, ed è questo:

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
            at pari_1_100.NumeriPari.StampaConFor(NumeriPari.java:35)
            at pari_1_100.Main.main(Main.java:13)
    Java Result: 1
    Qualunque metodo io provassi, mi dà quel errore.
    Vi chiedo di aiutarmi.
    Per altro domani ho l'esame e non so cosa farò. Ci saranno dei problemi ancora più difficili di questo.
    Ma a me dispiace per il fatto che io durante l'anno non sono riuscito a capire tutto. E comunque sento il bisogno di studiare, ma non ci riesco a capire anche delle cose banalissime.

    Grazie a tutti in anticipo!
    Storie, Pensieri & Riflessioni:
    http://storieriflessioni.blogspot.it/

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    attento a come lavori.

    Poi guardando il tuo codice

    codice:
        private int numero=0, numeriPari[];
        final int pari = 50;
    
        public NumeriPari(){
            numeriPari = new int[pari];
        }
    
     public int[] StampaConFor(){
            for(int i = 0;i <= pari; i++){
                numero=numero+2;
                numeriPari[i]=numero;
            }
        return numeriPari;
        }
    dichiari numeriPari come array di 50 posizioni, ma vuoi accedere alla 51 esima posizione (ecco l'errore)


    codice:
        private int numero=0, numeriPari[];
        final int pari = 50;
    
        public NumeriPari(){
            numeriPari = new int[pari];
        }
    
     public int[] StampaConFor(){
            for(int i = 0;i < pari; i++){
                numero=numero+2;
                numeriPari[i]=numero;
            }
        return numeriPari;
        }
    RTFM Read That F*** Manual!!!

  3. #3
    Ho corretto, ma mi dà l'errore lo stesso, stampandomi questo -> [I@82ba41 :

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
            at pari_1_100.NumeriPari.StampaConDo_While(NumeriPari.java:27)
            at pari_1_100.Main.main(Main.java:14)
    Java Result: 1

    codice:
    package pari_1_100;
    
    public class NumeriPari {
    
        private int numero=0, numeriPari[];
        final int pari = 50;
    
        public NumeriPari(){
            numeriPari = new int[pari];
        }
    
        public int[] StampaConWhile(){
            int i = 0;
            while(i<pari){
                numero=numero+2;            
                numeriPari[i] = numero;
                i++;
            }
        return numeriPari;
        }
    
        public int[] StampaConDo_While(){
            int i = 0;
            do{
                i++;
                numero=numero+2;
                numeriPari[i]=numero;
            }while(i<pari);
        return numeriPari;
        }
    
        public int[] StampaConFor(){
            for(int i = 0;i < 50; i++){
                numero=numero+2;
                numeriPari[i]=numero;
            }
        return numeriPari;
        }
        
    }
    Storie, Pensieri & Riflessioni:
    http://storieriflessioni.blogspot.it/

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    normale perché il tuo metodo restituisce un array di interi e quello che vedi è esattamente il risultato di toString() su un intero

    guarda qui
    RTFM Read That F*** Manual!!!

  5. #5
    Scusami, ma non ci sto capendo niente. Dopo aver corretto l'errore mi stampa quella stringa([I@82ba41), ma mi dà l'errore lo stesso. Non so se l'errore è stato corretto bene, se no come dovrei farlo? E il metodo toString() non capisco cosa c'entri, ho letto la documentazione, ma non ci sono riuscito a capire cosa c'entra con il mio problema. Quel metodo io non l'ho usato nel mio programma.
    Cosa devo fare? Non chiedo di darmi subito la risposta ... un'altro sugerimento.
    Grazie!
    Jan
    Storie, Pensieri & Riflessioni:
    http://storieriflessioni.blogspot.it/

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    l'errore è molto chiaro, tenti di accedere ad una locazione di un array non esistente, quindi ti invito a guardare alla riga indicata dall'errore come fai l'accesso alla stringa.

    codice:
    public int[] StampaConDo_While(){
            int i = 0;
            do{
                i++;
                numero=numero+2;
                numeriPari[i]=numero;
            }while(i<pari);
        return numeriPari;
        }
    se guardi con un po di attenzione a questo ciclo, vedi che i parte da zero, subito lo incrementi e poi lo usi come indice, quindi all'ultimo tu tenti di accedere alla locazione 50 quando questa non esiste.
    Ho solo guardato il tuo codice e il nome del metodo (da quello che dice il compilatore).

    codice:
    public int[] StampaConDo_While(){
            int i = 0;
            do{
               
                numero=numero+2;
                numeriPari[i]=numero;
     i++;
            }while(i<pari);
        return numeriPari;
        }
    questo dovrebbe funzionare
    Quello che tu visualizzi è perfettamente spiegato al link che ti ho mandato.
    Sono consapevole che stai studiando, ma se ti rimando alla fonte (o cmq alle API che spiegano cosa succede) leggile prima di dire non c'entra niente
    RTFM Read That F*** Manual!!!

  7. #7
    La documentazione del metodo toString() l'avevo letta, solo che non avevo capito cosa c'entrava con il mio problema, poichè ho fatto mille volte esercizi del genere senza nessun'altro metodo e mi veniva l'array stampato in output.
    Ho corretto di nuovo gli errori, cambiando un po' il tipo di dato che si restituisce (da int[] a String), pensando che fosse quello il problema:
    [code]package pari_1_100;

    public class NumeriPari {

    private int numero=0, numeriPari[];
    final int pari = 50;
    String r;

    public NumeriPari(){
    numeriPari = new int[pari];
    }

    public String StampaConWhile(){
    int i = 0;
    while(i<pari){
    numero=numero+2;
    numeriPari[i] = numero;
    i++;
    }
    r="Numeri: "+numeriPari[pari];
    return r;
    }

    public String StampaConDo_While(){
    int i = 0;
    do{
    numero=numero+2;
    numeriPari[i]=numero;
    i++;
    }while(i<pari);
    r="Numeri: "+numeriPari[pari];
    return r;
    }

    public String StampaConFor(){
    for(int i = 0;i < 50; i++){
    numero=numero+2;

  8. #8
    La documentazione del metodo toString() l'avevo letta, solo che non avevo capito cosa c'entrava con il mio problema, poichè ho fatto mille volte esercizi del genere senza nessun'altro metodo e mi veniva l'array stampato in output.
    Ho corretto di nuovo gli errori, cambiando un po' il tipo di dato che si restituisce (da int[] a String):
    codice:
    package pari_1_100;
    
    public class NumeriPari {
    
        private int numero=0, numeriPari[];
        final int pari = 50;
        String r;
    
        public NumeriPari(){
            numeriPari = new int[pari];
        }
    
        public String StampaConWhile(){
            int i = 0;
            while(i<pari){
                numero=numero+2;            
                numeriPari[i] = numero;
                i++;
            }
            r="Numeri: "+numeriPari[pari];
        return r;
        }
    
        public String StampaConDo_While(){
            int i = 0;
            do{
                numero=numero+2;
                numeriPari[i]=numero;
                i++;
            }while(i<pari);
            r="Numeri: "+numeriPari[pari];
        return r;
        }
    
        public String StampaConFor(){
            for(int i = 0;i < 50; i++){
                numero=numero+2;
                numeriPari[i]=numero;
            }
            r="Numeri: "+numeriPari[pari];
        return r;
        }
        
    }
    Ora, come sempre c'è qualcosa che non va. Mi dà l'errore di nuovo. E 'sta volta anche senza stamparmi qualcosa:

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
            at pari_1_100.NumeriPari.StampaConWhile(NumeriPari.java:20)
            at pari_1_100.Main.main(Main.java:13)
    Java Result: 1
    Storie, Pensieri & Riflessioni:
    http://storieriflessioni.blogspot.it/

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non cambia perché
    codice:
    r="Numeri: "+numeriPari[pari];
    qui tu concateni 2 stringhe, una è "Numeri: " mentre l'altra è il risultato della chiamata a toString() su un array di interi, chiamata implicita quando si stratta di concatenazioni di stringhe.

    quello che tu hai scritto equivale a
    codice:
    r="Numeri: "+numeriPari[pari].toString();
    e non cambia se fai

    codice:
    System.out.println(numeriPari[pari]);
    System.out.println(numeriPari[pari].toString());
    infatti hai lo stesso output.
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da JanQuarius
    Ora, come sempre c'è qualcosa che non va. Mi dà l'errore di nuovo. E 'sta volta anche senza stamparmi qualcosa:

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
            at pari_1_100.NumeriPari.StampaConWhile(NumeriPari.java:20)
            at pari_1_100.Main.main(Main.java:13)
    Java Result: 1

    è sempre lo stesso errore e non stai prestando attenzione.

    r="Numeri: "+numeriPari[pari];

    pari = 50, l'array ha 50 posti che vanno da 0 a 49. Se dici numeriPari[50] accedi ad una locazione di memoria che non esiste!!!!
    RTFM Read That F*** Manual!!!

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.