2008-02-21, 00:56
#1
Sitter här och sliter mitt hår över en del av en lite större uppgift, det är så att jag ska dela upp en sträng utan att använda t.ex StringTokenizer. Uppgiften går ut på att ta in en ekvation och dela upp den efter operatorer och stoppa dessa i en array, tex skulle ekvationen "-15+20*-15" se ut som följande:
Jag har kommit så långt att jag delar upp strängen "ganska" rätt, dock får den fnatt vid ganska enkla ekvationer. Jag tror att jag har fått den att funka (till viss del) med negativa tal, någon som kan vägleda/ge mig en hint på hur mitt problem skulle kunna lösas? Jag vill inte ha en "hel" lösning, för det kommer förstöra det roliga för mig, peka bara på vad i koden som ställer till det så kommer jag återkomma om jag inte hittar vidare. Observera att problemet skall lösas med endast grundläggande bitar.
Testa följande ekvationer så får ni ett hum om vad som inte funkar:
-10+-20/-15*30 //ok
-10+20/-15*30 //inte ok
-10--20/-15*30 //helt galet!
Som ni ser så lägger jag till de tre sista tecknen (*30) manuellt genom sista if-satsen. Finns det något sätt att komma runt detta så att det görs i looparna istället?
Citat:
-15
+
20
*
-15
+
20
*
-15
Jag har kommit så långt att jag delar upp strängen "ganska" rätt, dock får den fnatt vid ganska enkla ekvationer. Jag tror att jag har fått den att funka (till viss del) med negativa tal, någon som kan vägleda/ge mig en hint på hur mitt problem skulle kunna lösas? Jag vill inte ha en "hel" lösning, för det kommer förstöra det roliga för mig, peka bara på vad i koden som ställer till det så kommer jag återkomma om jag inte hittar vidare. Observera att problemet skall lösas med endast grundläggande bitar.
Testa följande ekvationer så får ni ett hum om vad som inte funkar:
-10+-20/-15*30 //ok
-10+20/-15*30 //inte ok
-10--20/-15*30 //helt galet!
Kod:
public class Main {
public static void main(String[] args) {
int k = 0;
int l = 0;
int tmp = 0;
String operator = "-+*/";
String input = "-10+-20/-15*30";
String[] array = new String[input.length()];
for(int i = 0; i<input.length(); i++ ) {
for(int j = 0; j<operator.length(); j++) {
if(input.charAt(i) == operator.charAt(j)) {
if(input.charAt(i+1) == operator.charAt(j)) {
array[k] = input.substring(tmp, input.indexOf(operator.charAt(j), tmp));
k++;
array[k] = input.substring(input.indexOf(operator.charAt(j), tmp), input.indexOf(operator.charAt(j), tmp)+1);
tmp = input.indexOf(operator.charAt(j), tmp);
} else {
array[k] = input.substring(tmp, input.indexOf(operator.charAt(j), tmp));
k++;
tmp = input.indexOf(operator.charAt(j), tmp);
}
}
}
}
if(input.charAt(tmp) != '-') {
array[k] = input.substring(tmp, tmp+1);
k++;
array[k] = input.substring(tmp+1);
} else {
array[k] = input.substring(tmp);
}
while(array[l] != null) {
System.out.println(array[l]);
l++;
}
}
}
Som ni ser så lägger jag till de tre sista tecknen (*30) manuellt genom sista if-satsen. Finns det något sätt att komma runt detta så att det görs i looparna istället?