Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    calcolatrice con arraylist

    Ciao sto provando a fare una calcolatrice semplificata che riconosce solo l'addizione usando gli ArrayList

    codice:
    import java.util.*;
    class Calcolatrice{
        ArrayList<Integer>numeri;
        char operazioni[];
        Calcolatrice(){
            numeri=new ArrayList<Integer>();
            operazioni=new char[numeri.size()];
        }
        public int calcola(String s){
            int risultato=0;
            int lunghezza=s.length();
            for(int pos=0;pos<=lunghezza;pos++){
                if(pos%2==0){
                numeri.add(Integer.valueOf(s.charAt(pos)));
            }else 
                for(Integer k:numeri){
                    switch(s.charAt(pos)){
                        case '+':risultato+=k;
                break;                
        }
     }
    }
    return risultato;
    }
    public static void main(String[] args){
        Calcolatrice c=new Calcolatrice();
        System.out.println(c.calcola("2+3+5"));    
        }
    }
    il compilatore mi segnala un errore di StringIndexOutOfBoundsException..perchè?come posso risolvere il problema nel modo piu semplice possibile?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    codice:
    for(int pos=0; pos < lunghezza; pos++) {

    PS: è la JVM che può dire StringIndexOutOfBoundsException, non il compilatore... le eccezioni esistono solo a runtime.


    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
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    codice:
                if(pos%2==0){
                numeri.add(Integer.valueOf(s.charAt(pos)));
    Io onestamente però non capisco il senso di questo. Cioè di quel pos%2==0. E poi se un carattere ad un certa posizione è es. '2', charAt restituisce il char che ha codice 50 e siccome NON esiste un valueOf di Integer che riceve un char (e se anche lo avesse, dovrebbe "sapere" che si vuole il valore del digit ... non del carattere Unicode!), allora il valueOf(int i) riceve 50 e restituisce un oggetto Integer con appunto 50.

    Rivedi bene tutto ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao grazie per la risposta...ok mo mi compila tutto..ma il risultato viene 151

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Scusate, aggiungo (non riesco a modificare il precedente post .. questioni tecniche):

    Giusto per chiarire:

    String s = "2";
    Integer i = Integer.valueOf(s.charAt(0));
    System.out.println(i); // Stampa 50
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ah allora quando uso valueOf di Integer non restuisce l'intero ma il codisce scii...ok
    grazie per le risposte

  7. #7
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ok grazie sei stato gentilissimo

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    quando uso valueOf di Integer non restuisce l'intero ma il codisce scii...
    Detto così .. no. Spiego meglio, il metodo

    public static Integer valueOf(int i)

    fa nient'altro che "incapsulare" un int in un oggetto Integer che contiene quel valore int. Non fa alcuna valutazione o modifica sul valore. Questo metodo tra l'altro è stato aggiunto in Java 5 per applicare il principio del "auto-boxing" effettuato dal compilatore.
    Se con Java 5, 6, ecc... scrivi

    Integer a = 10;

    sotto sotto viene invocato questo valueOf.

    Il punto è che hai usato charAt che ti restituisce un char, che alla fin fine contiene solo un codice Unicode. E siccome l'unico valueOf applicabile è appunto quello che riceve un int, viene fatta la conversione implicita da char a int che estende semplicemente il valore a 32 bit. Quindi il carattere '2' ha codice 50 (U+0032, notazione Unicode), pertanto il int passato a valueOf è appunto 50.

    Pertanto, come ti ho già detto prima: rivedi bene tutto quanto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.