我对Java比较新,我试图为我的计算机编程类编写一个程序,该程序将接受来自用户的字符串(字符串必须类似于1 + 2 - 1)和然后取字符串,使用分隔符去除+/-符号,然后执行加法和减法并返回字符串输入的总和。要做到这一点,我的程序必须运行一个while循环,每次找到一个整数时,它必须根据数字前面的+或 - 符号执行相应的功能。我尝试使用.findInLine让程序确定该字符是否为+或 - 然后根据此添加或减去后面的数字,但它似乎也不起作用分隔符,我不知道该怎么做。这是我的代码:
import java.util.*;
import java.io.*;
public class Lesson17p1_ThuotteEmily
{
public static void main(String args[])
{
Scanner kb=new Scanner(System.in);
System.out.println("Enter something like 8 + 33 + 1,257 + 137");
String s=kb.nextLine();
Scanner sc=new Scanner(s);
char c=sc.findInLine("\\+").charAt(0);
sc.useDelimiter("\\s*\\+\\s*");
double sum=0;
while(sc.hasNextInt());
{
if(c=='+')
{
sum=sum+sc.nextInt();
System.out.println(sum);
}
}
System.out.println("Sum is: "+sum);
}
}
我有代码 - 之前在程序中签名但暂时删除它们因为我想弄清楚如何使程序运行以解决其他问题然后我将在以后添加减法编程,使用同样适合添加的东西。
我的代码编译并运行正常,但是当它到达应该添加的部分然后返回问题的总和时,它就会停止。它不会返回错误或任何东西,它只是冻结。我不确定为什么会这样。我需要循环的分隔符和添加工作,当我尝试取出它时它返回了一个错误。我可以删除该行中的查找但是我需要一种不同的方式来让程序确定是否加减,并且我很难想到任何事情。我也尝试重新安排我的代码,以便它首先找到+或 - 符号,然后使用分隔符去除符号并继续加法或减法,但程序再次冻结。
非常感谢您提供的任何帮助!
答案 0 :(得分:0)
用评论重新编写代码:
import java.util.Scanner;
import java.util.LinkedList;
public class AddSubstract {
public static void main(String[] args) {
Scanner userInputScanner = new Scanner(System.in);
System.out.print("Type in an expression using + and - operators.\n>> ");
String userInput = userInputScanner.nextLine();
// our example input: " 35 - 245 + 34982 "
userInput = userInput.trim();
// input is now "35 - 245 + 34982"
if(userInput.charAt(0) != '-') userInput = "+" + userInput;
// we need to change the input to a set of operator-number pairs
// input is now "+35 - 245 + 34982"
int result = 0;
// result
byte sign = 0;
// sign; 1 -> positive number, -1 -> negative number, 0 -> not yet checked
int numberToPush = 0;
for(char c : userInput.toCharArray()) {
if(c == '+' || c == '-') {
if(sign == 0) sign = (c == '+')?1:-1;
else {
result += sign*numberToPush;
sign = (c == '+')?1:-1;
numberToPush = 0;
}
} else if(c >= '0' && c <= '9') {
numberToPush = ((int) c-'0') + 10*numberToPush;
}
}
result += sign*numberToPush;
System.out.println("The result is: "+result);
}