如何创建一个函数来检测字符串中的一个因子并将其转换为浮点数?
How can I make a function that detects a factor in a string and converts it into a float?
在我的作业中,我的代码必须能够进行加减乘除。大部分的工作都是在我老师的帮助下完成的,但是我想不通,我应该如何让它能够乘法和除法。
我假设我需要创建一个新函数来搜索我的字符串中的因子,然后让它创建一个子字符串。
我曾尝试通过在第 21 行和第 31 行添加相同的函数来扩展已经编写的代码,但这没有用。
public static int resultat;
public static String stykket = "3+9-22+35*2";
public static void main (String[] args) {
while (!taltjek(stykket)){
stykket = findled(stykket);
}
if (taltjek(stykket)){
int tal = StrToInt(stykket);
stykket = "";
resultat += tal;
println(resultat);
}
}
public static String findled(String stykket){
int tal;
for(int i = stykket.length() - 1; i > 0;i--){
if ((stykket.charAt(i) =='+')||(stykket.charAt(i) == '-')||(stykket.charAt(i) == '*')) {
String strengtal = stykket.substring(i+1, stykket.length());
tal = StrToInt(strengtal);
char test = stykket.charAt(i);
switch(test){
case '+': resultat += tal;
break;
case '-': resultat -= tal;
break;
case '*': resultat *= tal;
break;
}
stykket = stykket.substring(0,i);
i = stykket.length();
}
}
return stykket;
}
public static int StrToInt(String subString) {
int resultat;
resultat = 0;
try {
resultat = Integer.valueOf(subString);
} catch (NumberFormatException e) {
println("Det der er ikke et tal");
}
return resultat;
}
public static boolean taltjek (String subString){
int resultat = 0;
try {
resultat = Integer.valueOf(subString);
} catch (NumberFormatException e) {
return false;
}
return true;
}
我预计输出为 60,但输出为 25。
代码从右到左评估字符串。每当遇到运算符时,它都会解析运算符右侧的子串并将该运算应用于变量 "resultat".
resultat
没有初始化,所以会是0
。如果第一个运算是乘法,它将保持0
,因为x*0=0
.
如果我为 for
循环的每次迭代打印 i
和 resultat
,这就是输出(加上我的评论)
10: 0 // input: 2 resultat = 0
9: 0 // input: *2 resultat *= 2 => 0
8: 0 // input: 5
7: 0 // input: 35
6: 35 // input: +35 resultat += 35 => 35
5: 35 // input: 2
4: 35 // input: 22
3: 13 // input: -22 resultat -= 22 => 13
2: 13 // input: 9
1: 22 // input: +9 resultat += 9 => 22
25 // in your main method: resultat += 3 => 25
所以你的代码真正评估的是 0*2+35-22+9+3
我的修复建议是:
- 改为从左到右计算
- 用第一个运算符
之前的值初始化resultat
我不知道您的代码有什么要求,但恕我直言,表达式计算器的更好方法是使用递归方法。代码更简单(在我看来),您可以更轻松地实现运算符优先级。
在我的作业中,我的代码必须能够进行加减乘除。大部分的工作都是在我老师的帮助下完成的,但是我想不通,我应该如何让它能够乘法和除法。
我假设我需要创建一个新函数来搜索我的字符串中的因子,然后让它创建一个子字符串。
我曾尝试通过在第 21 行和第 31 行添加相同的函数来扩展已经编写的代码,但这没有用。
public static int resultat;
public static String stykket = "3+9-22+35*2";
public static void main (String[] args) {
while (!taltjek(stykket)){
stykket = findled(stykket);
}
if (taltjek(stykket)){
int tal = StrToInt(stykket);
stykket = "";
resultat += tal;
println(resultat);
}
}
public static String findled(String stykket){
int tal;
for(int i = stykket.length() - 1; i > 0;i--){
if ((stykket.charAt(i) =='+')||(stykket.charAt(i) == '-')||(stykket.charAt(i) == '*')) {
String strengtal = stykket.substring(i+1, stykket.length());
tal = StrToInt(strengtal);
char test = stykket.charAt(i);
switch(test){
case '+': resultat += tal;
break;
case '-': resultat -= tal;
break;
case '*': resultat *= tal;
break;
}
stykket = stykket.substring(0,i);
i = stykket.length();
}
}
return stykket;
}
public static int StrToInt(String subString) {
int resultat;
resultat = 0;
try {
resultat = Integer.valueOf(subString);
} catch (NumberFormatException e) {
println("Det der er ikke et tal");
}
return resultat;
}
public static boolean taltjek (String subString){
int resultat = 0;
try {
resultat = Integer.valueOf(subString);
} catch (NumberFormatException e) {
return false;
}
return true;
}
我预计输出为 60,但输出为 25。
代码从右到左评估字符串。每当遇到运算符时,它都会解析运算符右侧的子串并将该运算应用于变量 "resultat".
resultat
没有初始化,所以会是0
。如果第一个运算是乘法,它将保持0
,因为x*0=0
.
如果我为 for
循环的每次迭代打印 i
和 resultat
,这就是输出(加上我的评论)
10: 0 // input: 2 resultat = 0
9: 0 // input: *2 resultat *= 2 => 0
8: 0 // input: 5
7: 0 // input: 35
6: 35 // input: +35 resultat += 35 => 35
5: 35 // input: 2
4: 35 // input: 22
3: 13 // input: -22 resultat -= 22 => 13
2: 13 // input: 9
1: 22 // input: +9 resultat += 9 => 22
25 // in your main method: resultat += 3 => 25
所以你的代码真正评估的是 0*2+35-22+9+3
我的修复建议是:
- 改为从左到右计算
- 用第一个运算符 之前的值初始化
resultat
我不知道您的代码有什么要求,但恕我直言,表达式计算器的更好方法是使用递归方法。代码更简单(在我看来),您可以更轻松地实现运算符优先级。