PDA

View Full Version : [java]calcolatrice


el922
11-01-2015, 10:56
Salve a tutti sono alle rpime armi con java e sono incappata in questo problema:cry:
scrivi un programma che calcoli la somma e la differenza di n numeri inseriti da terminale;
i numeri e gli operatori sono separati tra di loro da uno o più spazi.
es: 1 + 3 - 4 + 12 + 2 - 10 - 1
e va stampato:3


import java.util.StringTokenizer;
import java.util.Scanner;
class Calcolatore{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String numeri=sc.nextLine();
StringTokenizer st = new StringTokenizer(numeri," ");
int somma=0;
while(st.hasMoreTokens()){
String f=st.nextToken();
if(f.equals("+")){
int n=Integer.parseInt(f);
somma=somma+n;
}else if(f.equals("-")){
int n=Integer.parseInt(f);
somma=somma-n;
}
}

System.out.println(somma);

}
}



So che sbaglio nel ciclo while ma non capisco dove! Il compilatore mi dà l'ellorre di NumberFormatException per il + perche? :cry:
grazie a tutti per la risposta

wingman87
11-01-2015, 11:23
Negli if controlli se f vale "+" o "-" e poi tenti di convertire quel valore ("+" o "-") in intero... Semplicemente non ha senso!

deadbeef
11-01-2015, 11:28
Stai cercando di convertire '+' in un intero, cosa che ovviamente ti da errore. Quell'operazione va eseguita sul carattere successivo all'operatore, ammesso che sia un numero (se faccio 1+a non funziona, per esempio)

el922
11-01-2015, 15:44
ciao grazie a tutti per le risposte :D ho riprovato a rifarlo così:

public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String numeri=sc.nextLine();
StringTokenizer st = new StringTokenizer(numeri," ");
String f=st.nextToken();
int a=Integer.parseInt(f);

int somma=0;
while(st.hasMoreTokens()){
a=Integer.parseInt(f);
int prec=a;
f=st.nextToken();
if(f.equals("+")){
f=st.nextToken();
a=Integer.parseInt(f);
a=prec+a;
}else
f=st.nextToken();
a=Integer.parseInt(f);
a=prec-a;

}


System.out.println(a);

}
}

adesso il compilatore non mi fà più errore solo che non mi prende il primo token perchè?

deadbeef
11-01-2015, 15:47
Perchè fai 2 st.nextToken() , uno fuori dal ciclo while e l'altro dentro, quindi alla prima esecuzione sei già sul secondo token anzichè sul primo

el922
11-01-2015, 16:19
Grazie sei un angeloooooooooo! :cry: Era da due giorni che che provavo e riprovavo a farlo :mc: il procedimento è un pò contorto però viene tutto :D

deadbeef
11-01-2015, 16:40
ottimo :D