java - 为什么我的 java 堆栈程序终止而不给出输出?

标签 java

两天以来我一直在尝试解决这个问题。我无法理解我犯了什么错误。

我正在实现一个Stack类Stack1,它有方法push、pop和peak。

在每个测试用例的 Stack1 类的主要方法中,我创建 Stack1 堆栈并根据用户给出的输入执行“n”插入、弹出和峰值操作

程序正在接受输入,但不提供任何输出

相反,它只是在接受输入后终止

如果有人能帮助我,那就太好了。 谢谢您

这是我的代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Stack1 {
static final  int max=1000000;
    int top;
    int[] arr=new int[max];
    Stack1()
    {
        this.top=-1;

    }
    public void push(int val)
    {
        if(top<max-1)
        this.arr[++top]=val;
    }
    public int pop()
    {
        if(top!=-1)
          return arr[top--];

            return -110;
    }
    public int peak()
    {
        if(top!=-1)
        {
            int maxi=arr[0];
                for(int i=0;i<=top;i++)
                {
                    if(maxi<arr[i])
                        maxi=arr[i];
                }
            return maxi;
        }
        return -1;
    }
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        int t=Integer.parseInt(br.readLine());
        Stack1[] st=new Stack1[t];

        for(int i=0;i<t;i++)
        {
             st[i]=new Stack1();
            int n=Integer.parseInt(br.readLine());
            while(n-->0)
            {
            String[] str=br.readLine().split(" ");

              if(str.length==2)
              {
                  int k=Integer.parseInt(str[1]);
                  st[i].push(k);

              }
             if(str[0]=="R")
            {
                int r=st[i].pop();
                if(r==-1)
                    bw.write("Empty\n");
                else
                    bw.write(r+"\n");
            }
            if(str[0]=="Q")
            {
                int q=st[i].peak();
                if(q==-1)
                    bw.write("Empty\n");
                else
                    bw.write(q+"\n");

            }
            }
        }
        bw.flush();

   }


}

不知道哪里出了问题 它接受所有输入但不提供任何输出 //

最佳答案

str[0]=="Q"str[0]=="R" 将始终返回 false== 是基元的关系运算符。 您需要使用对象实现的 equals 方法来比较对象。这是 Java 中的一个常见错误。

关于java - 为什么我的 java 堆栈程序终止而不给出输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58181227/

相关文章:

java - 不带数组的序列中的最大最小奇数

java - Android - 在 Fragment 中使用 getActivity.findViewById() 或从 MainActivity 发送 R.id 之间的区别

java - 网络接口(interface): you don't have permission to capture on that device (socket: Operation not permitted)

java - 如何将一个数组列表的前四个元素移动到另一个数组列表中?

java - getServletContext().getRealPath() 在 Controller (NPE)中不起作用,但在 jsp 中起作用

java - GC特殊处理的字段 `referent`

java - 在这种情况下如何使用GuavaOptional

java - 框架未设置为 Java 定义的大小

java - spring boot @transactional 如果成功则为真

java - 无法解析主机 "<URL here>"没有与主机名关联的地址