import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.lang.*;
class godmos{
public static StringBuffer deleter(StringBuffer s, int pos)
{
return new StringBuffer().append(s.substring(0, pos)).append(s.substring(pos + 1));
}
public String str1 = "5+7-9/9*2/4*3 ";
StringBuffer str0 = new StringBuffer(str1);
public static StringBuffer calculate (StringBuffer str)
{
// StringBuffer str11;
while(str.indexOf("/")!=-1 | str.indexOf("*")!=-1 ){
if(str.indexOf("/") < str.indexOf("*") && str.indexOf("/")!=-1)
{ int a1 = str.indexOf("/");
int a2 = a1+1;
int a3 = a1-1;
String y1;
String y2;
StringBuffer[] words = str.split("/",2);
Pattern p ,p1;
Matcher m ,m1;
p = Pattern.compile("\\d*$");
m = p.matcher(words[0]);
p1 = Pattern.compile("^\\d*");
m1 = p1.matcher(words[1]);
while (m.find() && m1.find()){
y1=m.group();
y2=m1.group();}
double tmp1 = Double.parseDouble(y1);
double tmp2 = Double.parseDouble(y2);
double tmp3=tmp1/tmp2;
str.delete(a3,a2+1);
str.insert(a3,tmp3);
}
if(str.indexOf("*") < str.indexOf("/") && str.indexOf("*")!=-1)
{ int a4 = str.indexOf("*");
int a5 = a4+1;
int a6 = a4-1;
String y3;
String y4;
String[] words = str.split("/",2);
Pattern p2,p11;
Matcher m2 ,m11;
p2 = Pattern.compile("\\d*$");
m2 = p2.matcher(words[0]);
p11 = Pattern.compile("^\\d*");
m11 = p11.matcher(words[1]);
while (m2.find() && m11.find()){
y3=m2.group();
y4=m11.group();}
double tmp4 = Double.parseDouble(y3);
double tmp5 = Double.parseDouble(y4);
double tmp6=tmp4/tmp5;
str.delete(a6,a5+1);
str.insert(a6,tmp6);
}
System.out.print(str);
}
while(str.indexOf("+")!=-1 | str.indexOf("-")!=-1 ){
if(str.indexOf("+") < str.indexOf("-") && str.indexOf("+")!=-1 )
{ int a11 = str.indexOf("+");
int a21 = a11+1;
int a31 = a11-1;
double tmp11 = Double.parseDouble(Character.toString(str.charAt(a31)));
double tmp21 = Double.parseDouble(Character.toString(str.charAt(a21)));
double tmp31=tmp11/tmp21;
str.delete(a31,a21+1);
str.insert(a31,tmp31);
}
if(str.indexOf("-") < str.indexOf("+") && str.indexOf("-")!=-1)
{ int a41 = str.indexOf("-");
int a51= a41+1;
int a61 = a41-1;
double tmp41 = Double.parseDouble(Character.toString(str.charAt(a61)));
double tmp51 = Double.parseDouble(Character.toString(str.charAt(a51)));
double tmp61=tmp41/tmp51;
str.delete(a61,a51+1);
str.insert(a61,tmp61);
}
}
return str;
}
StringBuffer f1 = calculate(str0);
public static void main (String[] args) {
godmos gm = new godmos();
System.out.print(gm.f1);
}
}
StringBuffer[] words = str.split("/",2); именно строка где есть слит видает такие ошибкиAndry KIT
5 уровень
привет .можете помочь .почему то строка со сплитом видает ошибку "символ не найдено" .заранее прошу прощение за код я буду его оптимизировать и дам нормальние именная переменним
Обсуждается
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ирина АлымоваJava Developer в Nerdysoft
26 августа 2021, 20:48
нет такого метода у этого класса
+ код практически нечитабельный, какое вообще изначальное задание стоит?
0
Andry KIT
27 августа 2021, 08:13
ну вообще это должен быть калькулятор; а почему split не читаеться или тогда почему патерн читаеться
0
Ksenia VolkovaJava Developer в DXCMaster
27 августа 2021, 09:04
Метод split есть у String. У StringBuffer его нет.
И если ты хочешь сделать калькулятор, то нельзя подгонять код под конкретную строку.
0
Andry KIT
27 августа 2021, 09:24
это я знаю
там будет строка для водда так что все нормально . спасибо за информцию
0
Ksenia VolkovaJava Developer в DXCMaster
27 августа 2021, 09:46
И что же будет делать твой код, если ему ввести
?
И еще - числа с точкой не попадут под регулярку "\\d"
0
Andry KIT
27 августа 2021, 11:11
спасибо что нашли проблеми я их исправлью но у моего калькулятора есть
еще одна проблема с удалением знаков и она самая страшная
я дополнью этот код
и проблема с одиночними примерами как 5+7 или 12/4 будет решена
на щет того что числа с точкой не попадают бод регулярку. вы прави по началу я переведу весь код с дабл в инт
а вот что делать с удалением символов я не знаю
допустим 56-86/43
надо чтоб было 56-2
а будет 56-823
не знаете как улучшить удаление символов?
0
Ksenia VolkovaJava Developer в DXCMaster
27 августа 2021, 11:22
Для этого вместо -1 и +1 можно использовать длину найденных строк.
Но поверь, это не самая страшная проблема.
Самая страшная - это то, как твой код построен в целом. Он и сейчас уже трудночитаемый и замусоренный, а по мере того как ты будешь дополнять его костылями, станет еще хуже.
0
Andry KIT
27 августа 2021, 11:58
я понял спасибо .код я упрощу .а как найти всю длину найдених строк ?
0
Ksenia VolkovaJava Developer в DXCMaster
27 августа 2021, 12:01
У String есть метод length()
0
Andry KIT
27 августа 2021, 12:04
спасибо
0