import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.lang.*;
class godmos111{
private StringBuffer deleter1(StringBuffer str5)
{ String str = str5.toString();
String[] words = str.split("/",2);
Pattern p ,p1;
Matcher m ,m1;
p = Pattern.compile("\\d+\\.\\d+$");
m = p.matcher(words[0]);
p1 = Pattern.compile("^\\d+\\.\\d+");
m1 = p1.matcher(words[1]);
while (m.find() && m1.find()){
String y1= m.group();
String y2 = m1.group();
String result1 = words[0].replaceAll(y1, "");
String result2 = words[1].replaceAll(y2, "");
StringBuffer result = new StringBuffer();
result.append(result1 + result2);
return result;
}
return null ;
}
private StringBuffer deleter2(StringBuffer str5)
{ String str = str5.toString();
String[] words = str.split("*",2);
Pattern p ,p1;
Matcher m ,m1;
p = Pattern.compile("\\d+\\.\\d+$");
m = p.matcher(words[0]);
p1 = Pattern.compile("^\\d+\\.\\d+");
m1 = p1.matcher(words[1]);
while (m.find() && m1.find()){
String y1= m.group();
String y2 = m1.group();
String result1 = words[0].replaceAll(y1, "");
String result2 = words[1].replaceAll(y2, "");
StringBuffer result = new StringBuffer();
result.append(result1 + result2);
return result;
}
return null ;
}
private Double delet(StringBuffer r2){
String r = r2.toString();
String[] words = r.split("/", 2);
Pattern p, p1;
Matcher m, m1;
p = Pattern.compile("\\d+\\.\\d+$");
m = p.matcher(words[0]);
p1 = Pattern.compile("^\\d+\\.\\d+");
m1 = p1.matcher(words[1]);
while (m.find() && m1.find()) {
String y1 = m.group();
String y2 = m1.group();
double tmp1 = Double.parseDouble(y1);
double tmp2 = Double.parseDouble(y2);
return tmp1 / tmp2;
}
return null ;
}
private Double doubleplus(StringBuffer r2){
String r=r2.toString();
String[] words1 = r.split("*",2);
Pattern p ,p1;
Matcher m ,m1;
p = Pattern.compile("\\d+\\.\\d+$");
m = p.matcher(words1[0]);
p1 = Pattern.compile("^\\d+\\.\\d+");
m1 = p1.matcher(words1[1]);
while (m.find() && m1.find() ){
String y1=m.group();
String y2=m1.group();
double tmp1 = Double.parseDouble(y1);
double tmp2 = Double.parseDouble(y2);
return tmp1*tmp2;
}
return null ;
}
public String str1 = "5+5-9/9";
StringBuffer str0 = new StringBuffer(str1);
private StringBuffer calculate (StringBuffer str)
{
int a=0;
while(str.indexOf("/")!=-1 | str.indexOf("*")!=-1 && a<10 ){
a++;
if(str.indexOf("/") < str.indexOf("*") && str.indexOf("/")!=-1 | str.indexOf("*")!=-1)
{int a1 = str.indexOf("/");
int a2 = a1+1;
int a3 = a1-1;
double tmp3=delet(str);
deleter1(str);
str.insert(a3,tmp3);
System.out.print(str);
}
if(str.indexOf("*") < str.indexOf("/") && str.indexOf("*")!=-1 | str.indexOf("/")!=-1)
{int a4 = str.indexOf("*");
int a5 = a4+1;
int a6 = a4-1;
double tmp6=doubleplus(str);
deleter2(str);
str.insert(a6,tmp6);
}
}
return str;
}
StringBuffer f1 = calculate(str0);
public static void main (String[] args) {
godmos111 gm = new godmos111();
System.out.print(gm.f1);
}
}
Andry KIT
5 уровень
привет. у меня проблема .консоль видает ошибку.как я понял чтото не понравилось в условии "если"
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Максим
25 сентября 2021, 17:04
Не вдаваясь в подробности, одна из проблем, метод doubleplus:
Экранирование символов
Но и дальше идет другая ошибка в этом методе, вы передаете значение str1 = "5+5-9/9", но при разделении строки у вас не будет второго элемента. В строке 82 m1 = p1.matcher(words1[1]); вылетит ArrayIndexOutOfBoundsException
Вы не можете использовать разделитель в таком виде, т.к. в системе это считается зарезервированным символом. Чтобы вам передать этот знак в виде строки, его нужно дополнительно экранировать String.split( " \\* " , 2). Подробнее: 0
Andry KIT
27 сентября 2021, 18:14
логика калькулятора исключает в данном случае использование функции даблплас .ведь в строке нет "*"
а про екранирование спасибо
0