我想添加一对用空格隔开的数字。因此,用户输入多个任意长度的数字,并用空格分隔。我为此使用BigInteger。使用两个堆栈,必须将每对数字加在一起,并打印出结果。例如,输出将如下所示:
10 + 10 = 20
99 +1 = 100
1000000000000000000000000000000 + 1000000000000000000000000000000 = 2000000000000000000000000000000
我需要使用堆栈来做到这一点。这是我到目前为止所拥有的,但是我不确定在此之后该去哪里。
public static void main (String[] args)
{
Stack<BigInteger> stack = new Stack<BigInteger>();
System.out.println("Please write some pairs of numbers to add separated by a space: ");
Scanner input = new Scanner(System.in);
for (BigInteger number : input.nextLine().split(" "))
{
for (int i = 0; i < number.length(); i++)
{
stack.push(number);
}
while (!stack.isEmpty()) {
reverseInput += stack.pop();
}
}
}
答案 0 :(得分:0)
input.nextLine().split(" ");
返回String[]
,您不能自动将其强制转换为BigInteger[]
,因为那样会抛出ClassCastException
。
您允许使用十进制值吗?如果是这样,最好将每个String
元素转换为原始double
表示形式,因为您不需要BigDecimal
提供的额外精度。
由于不允许使用十进制值,因此您希望将String
转换为其integer
表示形式。
for (final String s : input.nextLine().split(" ")) {
final int value = Integer.parseInt(s);
stack.push(value);
}
堆栈通用类型将为Integer
。所以Stack<Integer>
您是否考虑过用户输入错误的情况?在这种情况下,您需要处理NumberFormatException
答案 1 :(得分:0)
您不需要内部for
循环。如果您尝试使用堆栈将两个数字相加,则可以将它们压入堆栈,然后弹出并添加到结果中,例如:
Stack<BigInteger> stack = new Stack<BigInteger>();
System.out.println("Please write some pairs of numbers to add by a space: ");
Scanner input = new Scanner(System.in);
for (BigInteger number : input.nextLine().split(" "))
{
BigInteger result = new BigInteger("0");
while (!stack.isEmpty()) {
result.add(stack.pop());
}
System.put.println("Result : " + result);
答案 2 :(得分:0)
首先
for (BigInteger number : input.nextLine().split(" "))
这是行不通的,因为该.split()
返回一个类型为String[]
的对象,并且您不能直接将String
视为BigInteger
。
此外,您正在将for循环加倍。我在上面复制的那行 if 以您想要的方式工作,它将遍历输入中的所有数字。因此,不需要内部for循环。实际上,由于BigInteger
没有.length()
方法,因此它甚至都不会编译。
但是您在正确的轨道上。您可以做的是像对待已经输入的那样标记输入,然后将每个元素按原样推入堆栈。因为不需要将它们作为BigInteger
推入堆栈。您可以拥有一个Stack<String>
,然后将它们弹出以进行添加时将它们转换为BigInteger
。或者,将它们推入堆栈时,将它们转换为BigInteger
。