17. maj 2001 - 09:11Der 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.
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.
ø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.
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 );
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.
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å.
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 :-)
Synes godt om
Ny brugerNybegynder
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.