收入组成部分用数字表示;而你的消费支出都是以“-”开头的数字,输入字符串可以包含小写字母和大写字母,以及其他字符。
这是学校的一个问题,我对其进行作答后发现我写了一座屎山出来,有没有可以提供不同的思路来简化这一程序来实现目的
样例1.
int netIncome = calcNetIncome("salary 15000yuan bonus2000 rent -1000Y");
System.out.println("Net Income = " + netIncome);
Net Income = 16000
样例2.
int netIncome = calcNetIncome("25000 gross income, -200 water, electricity:-300");
System.out.println("Net Income = " + netIncome);
Net Income = 24500
public static int calcNetIncome(String input) {
int totalincome=0;//定义总收入为0
String mins="-";
Character min=mins.charAt(0);//获取char-
String numsP="";
String minnums="-";//定义两个字符串
int i=0;
int o=0;
int sum1=0;
int sum2=0;
for (int j=0;j();j++){
if (input.charAt(j)==min){//进行负数的取数
for (int t=j;t();t++){
if (Character.isDigit(input.charAt(t))==true){//如果当前字符是数字
minnums=minnums+input.charAt(t);//字符串的堆叠
int[] all=new int[i+2];
if (t+1()){
if (Character.isDigit(input.charAt(t+1))==false){//当前字符的后一位不是数字,输出数字
all[i]=Integer.parseInt(minnums);
i=i+1;
minnums= "-";
j=t;
for (int p=0;p[p];
}
break;
}
}else if (t==input.length()-1&&Character.isDigit(input.charAt(t))==true){//当最后的字符为数字
all[i]=Integer.parseInt(minnums);
i=i+1;
minnums="-";
j=t;
for (int p=0;p[p];
}
break;
}
}
}//停止循环负数获取
}else {
if (Character.isDigit(input.charAt(j))==true){//正数
numsP=numsP+input.charAt(j);
int[] all2=new int[o+2];
if (j+1()){
if (Character.isDigit(input.charAt(j+1))==false) {
all2[o] = Integer.parseInt(numsP);
o=o+1;
numsP = "";
for (int p=0;p[p];
}
}
} else if (j==input.length()-1&&Character.isDigit(input.charAt(j))==true) {
all2[o] = Integer.parseInt(numsP);
o=o+1;
numsP = "";
for (int p=0;p[p];
}
}
}
}
}
totalincome=sum2+sum1;
return totalincome;//返回总收入
}
我的比你简单点吧,没有你那么多,仅供参考
public static int cal(String input) {
char[] chars = input.toCharArray();
StringBuilder sb1 = new StringBuilder(); // 正数的字符串,用 , 隔开
StringBuilder sb2 = new StringBuilder(); // 负数的字符串,用 , 隔开
for (int i = 0; i < chars.length; i++) {
if (Character.isDigit(chars[i]) || chars[i] == '-') {
if (chars[i] == '-') {
// 负数,要从下一个下标开始,所以是i+1
i = i+1;
// 循环到不是数字结束,然后拼接搭配字符串里面,加上 ,
while (i <chars.length && Character.isDigit(chars[i])) {
sb1.append(chars[i]);
i++;
}
sb1.append(",");
} else {
// 正数
// 循环到不是数字结束,然后拼接搭配字符串里面,加上 ,
while (i <chars.length && Character.isDigit(chars[i])) {
sb2.append(chars[i]);
i++;
}
sb2.append(",");
}
}
}
// 计算和,再相减
String s1 = sb1.toString();
String s2 = sb2.toString();
// 用逗号切割出数组,然后相加
String[] split1 = s1.split(",");
String[] split2 = s2.split(",");
int sum1 = 0;
for (String s : split1) {
sum1 += Integer.valueOf(s);
}
int sum2 = 0;
for (String s : split2) {
sum2 += Integer.valueOf(s);
}
return sum2 - sum1;
}
public static void main(String[] args) {
System.out.println(cal("25000 gross income, -200 water, electricity:-300"));
}