3 回答
TA贡献1802条经验 获得超6个赞
你不需要内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);
TA贡献1887条经验 获得超5个赞
首先,
for (BigInteger number : input.nextLine().split(" "))
行不通,因为它.split()
返回一个 type 的对象String[]
,你不能直接把String
as 当作BigInteger
.
此外,您正在加倍使用 for 循环。我在上面复制的那一行,如果它按照你想要的方式工作,它将遍历你输入中的所有数字。所以不需要那个内部 for 循环。事实上,它甚至不会编译,因为BigInteger
没有.length()
方法。
但你在正确的轨道上。您可以做的是像您已经在做的那样标记输入,并将每个元素按原样推入堆栈。因为没有必要将它们作为BigInteger
. 您可以有一个Stack<String>
, 然后BigInteger
在您将它们弹出以进行添加时将它们转换为。或者,将它们转换为BigInteger
当您将每个推入堆栈时。
TA贡献1839条经验 获得超15个赞
input.nextLine().split(" ");
返回 a String[],您不能自动将其转换为BigInteger[],因为这会抛出 a 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
添加回答
举报