Avatar billede knisse Nybegynder
17. maj 2001 - 09:11 Der er 6 kommentarer og
2 løsninger

Problem med udregning i Java

Jeg skal lave en application der kan udregne et resultat ud fra to tal der bliver tastet ind i et JTextField f.eks. 3+3.
Her er min kode:
String tempValue = v;
StringTokenizer token = new StringTokenizer( tempValue, \"+\" );
while( token.hasMoreTokens() ){
                   
String temp1 = token.nextToken();
String operatorInUse;
String temp2 = token.nextToken();
int tempValue1 = Integer.parseInt(temp1);
int tempValue2 = Integer.parseInt(temp2);

Jeg havde forestillet mig at der skulle en loop til for at tjekke hvilken operator strengen indeholder f.eks. + - * / og i min StringTokenizer skal strengen så deles op ved den operator. tempValue1 og 2 skal så indeholde hver deres del af strengen og operatoren skal så være indeholdt i en 3. variable. Til sidst skal der så ske noget i retningen af tempValue1 + operator + tempValue2.

Men jeg kan ikke få det til at virke.
Avatar billede agermose Nybegynder
17. maj 2001 - 09:17 #1
Hvis jeg må foreslå en anden løsning, så skal du kigge efter OROMatcher på nettet, og skriv så
PerlUtil perl = new PerlUtil();
if (perl.match(\"#(\\\\d+)\\\\s*([+-*\\/])\\\\s*(\\\\d+)#\", tempValue)) {
  val1 = perl.group(1);
  op = perl.group(2);
  val2 = perl.group(3);
}

Der er også et perl reg API under apache projektet, som faktisk er OROMatcher, der er overdraget til apache.
Avatar billede knisse Nybegynder
17. maj 2001 - 09:25 #2
Jeg forstår ikke helt dit svar, det skal laves i ren java, og det du skriver ligner ikke java, det kan godt være jeg tager fejl.

Uddyb?

//Kris
Avatar billede agermose Nybegynder
17. maj 2001 - 09:38 #3
øhh, hvis du med ren java mener core APIer, så tager du ikke fejl, men ellers gør du. Det er et 100% Java API, som du ligger i din CLASSPATH og importere som normalt. Det giver dig en klasse til at lave regulære udtryk ved Perl syntax. Regulære udtryk er meget smarte til at håndtere input validering, men desvære noget der ikke ligger i Java core APIerne. Derfor må man gå til f.eks. OROMatcher eller tilsvarende Apache API.

Men det er altså 100% implementeret i Java.
Avatar billede knisse Nybegynder
17. maj 2001 - 10:41 #4
desværre, jeg skal aflevere i eftermiddag og har ikke tiden til at gå for meget ind i nye ting. Nu har jeg fået lavet en stack der indeholder mine tokens, men jeg mangler stadig at få operatoren frem:
String stringOfOperators = \"+,-,*,/\";
int usedOperator = v.indexOf(stringOfOperators);
System.out.println( usedOperator );
                   
String tempValue = v;
StringTokenizer token = new StringTokenizer( tempValue, stringOfOperators );
while( token.hasMoreTokens() ){
                   
String temp1 = token.nextToken();
String temp2 = token.nextToken();
String temp3 = token.nextToken();
                   
Stack myStack = new Stack();
myStack.push(temp1);
myStack.push(temp2);
myStack.push(temp3);
                       
while( !myStack.empty() ){
System.out.println( \"stack: \" + myStack.pop() );
}
replyString = \"Resultatet er: \" + (temp1 + Integer.toString(usedOperator) + temp2);
}

Men nu er jeg løbet ind i et nyt problem. Min stringtokenizer skal selv tilføje en ny token hvis man f.eks. skriver 3+3+3 og der efter tilføje den nye token i min stack.

//Kris
Avatar billede agermose Nybegynder
17. maj 2001 - 10:52 #5
tokenizeren returnere kun tokens, ikke delimiters? Derfor får du ikke \"+-*/\" tilbage på den måde?
Avatar billede knisse Nybegynder
17. maj 2001 - 11:40 #6
ok, hvad gør jeg så? min stringtokenizer deler fint strengen ved hver operator og jeg kan sagtens få hver del ned i en token.

Ideen var så at hver token skulle parseInt for at få værdien ud og arbejde videre med den.

Har du et bedre forslag?

//Kris
Avatar billede agermose Nybegynder
17. maj 2001 - 12:02 #7
Hvis ud ikke vil bruger regulærer udtryk, så tror jeg at du er ude i noget med at skrive din egen tokenizer, som løber strengen igennem, og samler i grupper af tal+.+, og *+-/. Du kan så passende returnere disse i en stack som du bagefter kan regne på.
Avatar billede logical Nybegynder
18. maj 2001 - 23:03 #8
Nu ser jeg jo først dit spørgsmål i dag, desværre, men løsningen er din konstruktør til StringTokenizer...

    String s = \"1*3\";
    StringTokenizer st = new StringTokenizer(s,\"+-*/\", true);
    while (st.hasMoreTokens())
        System.out.println(st.nextToken());


Tredie parameter i konstruktøren siger, at den også skal behandle tokens undervejs, så programmet skriver følgende
1
*
3

Var det det, du skulle bruge :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester