思路
就是把=号左右两边切割开来 然后再单独计算左右两边的x的数值跟数字的大小 然后把x跟数值分在两边 然后在判断如果 x=0
值为0的情况下 返回Infinite solutions 如果仅仅x=0 返回 No solution 如果都不是 则用 数值/x的值然后拼接 返回结果
难点在于 切割左右的x值跟数值 这里我用最复杂的 双指针 碰到符号就截取 这种方法来做 如果有大佬,可以直接使用正则表达式来会方便很多
public class Solvethequation {
/**
* 思路就是 把=号左右两边切割开来
* 然后再单独计算左右两边的x的数值跟数字的大小
* 然后把x跟数值分在两边 然后在判断如果 x=0 值为0的情况下 返回Infinite solutions 如果仅仅x=0 返回 No solution
* 如果都不是 则用 数值/x的值 然后拼接 返回结果
* 难点在于 切割左右的x值跟数值 这里我用最复杂的 双指针 碰到符号就截取 这种方法来做 如果有大佬,可以直接使用正则表达式来会方便很多
* */
public static void main(String[] args) {
Solvethequation s = new Solvethequation();
System.out.println(s.solveEquation("-x=-1"));
}
public String solveEquation(String equation) {
//切割
String[] split = equation.split("=");
// String[] split1 = split[0].split("[+|-]?[0-9]*"); 要是有能力的话用正则表达式来处理这一步是最好的
//左边
String s = split[0];
ArrayList<String> list = new ArrayList<>();//用于存储 类似于 +x -2x +5
int l = 0;//左指针
int r = l;//有指针
while (l < s.length()) {//将符合存储的数据给切割出来 存储到list中
if (s.charAt(r) == '+' || s.charAt(r) == '-' && r != 0) { //r!=0 是因为如果第一个是 -2x 这种情况
if (l != r) {
list.add(s.substring(l, r));
l = r;
r++;
}
} else {
if (++r >= s.length()) {//如果最后超过了界限 后面已经没有 直接截取并结束
list.add(s.substring(l, r));
break;
}
}
}
int x = 0;//x的值 为5 2x+3x+5=2x+3
int num = 0;//数值 为5
for (int i = 0; i < list.size(); i++) {//计算x的值跟数值
String data = list.get(i);
if (data.contains("x")) {
if (data.charAt(0) == '+' || data.charAt(0) == '-') {
if (data.length() > 2) {
x += (Integer.parseInt(data.substring(0, data.length() - 1)));
} else {
if (data.charAt(0) == '-') {
x -= 1;
} else {
x += 1;
}
}
} else {
if (data.length() > 1) {
x += (Integer.parseInt(data.substring(0, data.length() - 1)));
} else {
x += 1;
}
}
} else {
num += (Integer.parseInt(data));
}
}
System.out.println(x);//x的值
System.out.println(num);//数值
System.out.println(list);//输出列表中的 -2x +5 6 -2 +5x 2x 等等查看分割是否正确
//右边
String s1 = split[1];
ArrayList<String> list1 = new ArrayList<>();
int l1 = 0;
int r1 = l1;
while (l1 < s1.length()) {
if (s1.charAt(r1) == '+' || s1.charAt(r1) == '-' && r1 != 0) {
if (l1 != r1) {
list1.add(s1.substring(l1, r1));
l1 = r1;
r1++;
}
} else {
if (++r1 >= s1.length()) {
list1.add(s1.substring(l1, r1));
break;
}
}
}
int x1 = 0;
int num1 = 0;
for (int i = 0; i < list1.size(); i++) {
String data = list1.get(i);
if (data.contains("x")) {
if (data.charAt(0) == '+' || data.charAt(0) == '-') {
if (data.length() > 2) {
x1 += (Integer.parseInt(data.substring(0, data.length() - 1)));
} else {
if (data.charAt(0) == '-') {
x1 -= 1;
} else {
x1 += 1;
}
}
} else {
if (data.length() > 1) {
x1 += (Integer.parseInt(data.substring(0, data.length() - 1)));
} else {
x1 += 1;
}
}
} else {
num1 += (Integer.parseInt(data));
}
}
System.out.println(x1);
System.out.println(num1);
System.out.println(list1);
int x2 = x - (x1);
int num2 = num1 - (num);
if (x2 == 0 && num2 == 0) {//判断是否为第一种情况
return "Infinite solutions";
}else if(x2 == 0){//判断是否为第二种情况
return "No solution";
}
int result = (num2 / x2);//计算结果
return "x=" + result;//拼接返回结果
}
}