使用堆栈吗?

时间:2019-02-18 18:35:54

标签: java stack

我想添加一对用空格隔开的数字。因此,用户输入多个任意长度的数字,并用空格分隔。我为此使用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();
        }
    }  
}

3 个答案:

答案 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