【问题标题】:Get Maximum Integer Value From Stack [duplicate]从堆栈中获取最大整数值[重复]
【发布时间】:2021-02-20 17:47:12
【问题描述】:

我是 JAVA 新手,正在努力学习。如果我的问题是基本的并且格式不正确,请提前道歉。

我想了解如何获取堆栈中的最大 int 值?

private Stack<Integer> stack = new Stack<>();
stack.push(2456785434);
stack.push(1);

本质上,堆栈有两个整数,但我想将最大值 (2456785434) 返回到变量中。请问我该怎么做?

下面是添加用户输入的两个数字的方法(这些数字被解析为 int 值) - firstNumber 和 secondNumber。

private int performCalc(int firstNumber, int secondNumber, String op) {
    if (s.equals("+")) {
        return secondNumber + firstNumber;
    } else if (s.equals("-")) {
        return secondNumber - firstNumber;
    } else if (s.equals("*")) {
        return secondNumber * firstNumber;
    } else if (s.equals("/")) {
        return secondNumber / firstNumber;
    } else if (s.equals("%")) {
        return secondNumber % firstNumber;
    } else {
        return 0;
    }
}

【问题讨论】:

  • 我想保留堆栈。
  • 您似乎是从一些非常古老的材料中学习 Java 的? Stack 类是遗留的,不再使用。我会使用ArrayListArrayDequeStack 有效,坚持用就可以。
  • 您的搜索结果是什么?我敢肯定,类似的问题已经被问过很多次了。

标签: java stack


【解决方案1】:

首先,2456785434 超出了int 的范围,它的值只能从-21474836482147483647

您可以使用Stream API 从堆栈中查找最大值。

import java.util.Comparator;
import java.util.Optional;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(245678544);
        stack.push(1);

        Optional<Integer> max = stack.stream().max(Comparator.naturalOrder());
        System.out.println(max.get());
    }
}

输出:

245678544

【讨论】:

  • 抱歉,不需要存储在变量中,即 int。只想返回堆栈中的最大值。
  • @AM_86 - 当你从某个方法返回一个值时,它必须被收集到某个变量中,这就是你需要声明返回类型的原因。如果您已经知道您的号码可能超出int 的范围,您可以根据需要选择更大的类型,如long(即Stack&lt;Long&gt;)甚至更大的BigInteger。如有任何疑问/问题,请随时发表评论。
  • @AM_86 这对我来说不是很清楚,抱歉。您是说要编写一个以Stack 为参数并返回Stack 中的最大值的方法吗?如果是这样,Stack 是否允许为空,如果是,在这种情况下会发生什么?你是对的,要从你的方法中返回最大值,你不需要先将它存储在变量中。
  • @OleV.V. - 我没有说你必须显式声明一个变量来收集返回值。我说过它必须被收集到某个变量中(可能是 JVM 提供的隐式变量),这就是为什么你需要声明返回类型。这不是一个正确的说法吗?
  • @OleV.V.是的,您的假设是正确的。如果总和超过 2147483647 则返回 2147483647。我将修改我的问题并提供我的方法。我希望这会有所帮助,您可以解释一个可能的解决方案。
【解决方案2】:

您可以为此使用 Collections 类

Integer maxValue = Collections.max(stack)

【讨论】:

  • Joakim Danielson - 我同意你的看法。恕我直言,将问题标记为重复是可以的,但不应贬低真正的努力。
  • 为什么投反对票? 只是猜测:因为有人认为我们不应该(再次)回答这样一个研究不足的问题?因为从另一个答案下的讨论中,有人怀疑 OP 是否真的总是想要整个堆栈中的最大元素?如果这确实是需要的,你的方式就是我喜欢的方式。
  • @JoakimDanielson 投反对票的不是我。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多