【发布时间】:2018-10-22 19:53:34
【问题描述】:
我编写了一个程序,我想对字符串进行加减运算,其中所有字符串的长度都是四,看起来像“+002”、“+569”、“-022”、“-789”等等。我试图在不使用任何乘法、除法或余数的情况下做到这一点,但只使用加法和减法作为运算,但我的问题是某些情况还不起作用,我不明白为什么或如何我可以修复它,因为用这么长的代码很难很好地看出问题到底在哪里以及我应该改变什么。所以这里是有关的方法:
public static String add(String s1, String s2) {
int number;
int[] s = new int[4];
String result = "";
if (s1.contains("+") && s2.contains("+")) {
result = "+";
for (int i = 1; i < s1.length(); ++i) {
if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {
if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
else {
s[i] = (s1.charAt(i)) + (int) (s2.charAt(i)) - 106;
++s[i - 1];
}
}
else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {
s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
}
}
}
else if (s1.contains("-") && s1.contains("-")) {
result = "-";
for (int i = 1; i < s1.length(); ++i) {
if ((!(s1.charAt(i) == 0 || s2.charAt(i) == 0))) {
if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
else {
s[i] = (s1.charAt(i)) + (int) (s2.charAt(i)) - 106;
++s[i - 1];
}
}
else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {
s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
}
}
}
//if (s1.contains("+") && s1.contains("-") || s1.contains("-") && s1.contains("+"))
else if (s1.contains("+") && s2.contains("-")) {
char[] size1 = new char[s1.length()];
char[] size2 = new char[s1.length()];
for (int i = 1; i < s1.length(); ++i) {
size1[i] = s1.charAt(i);
size2[i] = s2.charAt(i);
}
if (size1[1] > size2[1]) result = "+";
else if (size1[1] == size2[1]) {
if (size1[2] > size2[2]) result = "+";
else if (size1[2] == size2[2]) {
if (size1[3] > size2[3]) result = "+";
else if (size1[3] == size2[3]) return "+000";
else result = "-";
}
else result = "-";
}
else result = "-";
for (int i = 1; i < s1.length(); ++i) {
if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {
if (s1.charAt(1) < s2.charAt(1)) {
if (s1.charAt(2) <= s2.charAt(2)) {
if (s1.charAt(3) > s2.charAt(3)) {
s[2] = 10 - (s2.charAt(2) - s1.charAt(2));
s[3] = 10 - (s1.charAt(3) - s2.charAt(3));
--s[2];
s[1] = (s2.charAt(1) - s1.charAt(1));
}
else {
s[2] = (s2.charAt(2) - s1.charAt(2));
s[3] = (s2.charAt(3) - s1.charAt(3));
s[1] = s2.charAt(1) - s1.charAt(1);
}
}
else {
s[2] = 10 - (s1.charAt(2) - s2.charAt(2));
if (s1.charAt(3) < s2.charAt(3)) s[3] = (s2.charAt(3) - s1.charAt(3));
else {
s[3] = 10 - (s1.charAt(3) - s2.charAt(3));
--s[2];
}
}
}
else if (s1.charAt(i) - s2.charAt(i) < 0 && i == 1) s[i] = s2.charAt(i) - s1.charAt(i);
else if (s1.charAt(i) - s2.charAt(i) < 0 && i > 1) {
s[i] = s2.charAt(i) - s1.charAt(i);
}
else s[i] = s1.charAt(i) - s2.charAt(i);
}
}
}
else {
char[] size1 = new char[s1.length()];
char[] size2 = new char[s1.length()];
for (int i = 1; i < s1.length(); ++i) {
size1[i] = s1.charAt(i);
size2[i] = s2.charAt(i);
}
if (size1[1] < size2[1]) result = "+";
else if (size1[1] == size2[1]) {
if (size1[2] < size2[2]) result = "+";
else if (size1[2] == size2[2]) {
if (size1[3] < size2[3]) result = "+";
else if (size1[3] == size2[3]) return "+000";
else result = "-";
}
else result = "-";
}
else result = "-";
for (int i = 1; i < s1.length(); ++i) {
if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {
if (s1.charAt(1) > s2.charAt(1)) {
if (s1.charAt(2) >= s2.charAt(2)) {
if (s1.charAt(3) < s2.charAt(3)) {
s[2] = 10 - (s1.charAt(2) - s2.charAt(2));
s[3] = 10 - (s2.charAt(3) - s1.charAt(3));
--s[2];
}
else {
s[2] = (s1.charAt(2) - s2.charAt(2));
s[3] = (s1.charAt(3) - s2.charAt(3));
s[1] = s1.charAt(1) - s2.charAt(1);
}
}
}
else if (s1.charAt(i) - s2.charAt(i) > 0 && i == 1) s[i] = s1.charAt(i) - s2.charAt(i);
else if (s1.charAt(i) - s2.charAt(i) > 0 && i > 1) {
s[i] = s1.charAt(i) - s2.charAt(i);
}
else s[i] = s2.charAt(i) - s1.charAt(i);
}
}
}
for (int i = 1; i < s.length; ++i) result += s[i];
return result;
}
【问题讨论】:
-
你可以用两行代码把字符串转换成数字,然后用它们计算。还是有什么原因,你为什么用字符串计算?
-
我不允许使用从 String 到 int 的类型转换方法。
-
您是否允许仅使用循环和 charAt 自行转换它?像这样:digit0 + digit1 * 10 + ...(你甚至不需要循环)
-
如果我使用加法定义的乘法方法,那么是的。
标签: java string char int charat