Java 这有什么区别?

Java 这有什么区别?,java,stack,Java,Stack,这个问题与hackerRank的问题有关- 在while循环中放入堆栈有什么区别 若我将堆栈放入循环中,则模式“[]”返回true,但返回false 如果我真的在课堂上学习的话 正确答案应该是正确的 import java.util.*; class Solution{ public static void main(String []argh) { Scanner sc = new Scanner(System.in); w

这个问题与hackerRank的问题有关-

在while循环中放入堆栈有什么区别

若我将堆栈放入循环中,则模式“[]”返回true,但返回false 如果我真的在课堂上学习的话

正确答案应该是正确的

 import java.util.*;
    class Solution{

       public static void main(String []argh)
        {
      Scanner sc = new Scanner(System.in);


      while (sc.hasNextLine()) {
         String input=sc.nextLine();
           Stack<Character>  stack =  new Stack<>();
          for( char c : input.toCharArray() ){


              if( c == '{' || c == '(' || c =='['){
                  stack.push(c);
                  continue;
              }

              if( c == '}' && !stack.isEmpty() && stack.peek() == '{' ){
                  stack.pop();
                  continue;
              }

               if( c == ')' && !stack.isEmpty() && stack.peek() == '(' ){
                  stack.pop();
                  continue;
              }
               if( c == ']' && !stack.isEmpty() && stack.peek() == '[' ){
                  stack.pop();
                  continue;
              }

              if( c == '}' || c == ')'|| c == '['){
                  stack.push(c);
                  break;
              }
   } //end for
          System.out.println(stack.isEmpty());
          } //end while



      } //end main


   } //end class
import java.util.*;
类解决方案{
公共静态void main(字符串[]argh)
{
扫描仪sc=新的扫描仪(System.in);
while(sc.hasNextLine()){
字符串输入=sc.nextLine();
堆栈=新堆栈();
for(char c:input.toCharArray()){
如果(c=='{'| | c=='('| | c=='[')){
堆栈推送(c);
继续;
}
如果(c=='}'&&!stack.isEmpty()&&stack.peek()=='{'){
stack.pop();
继续;
}
如果(c==')和&!stack.isEmpty()&&stack.peek()=='(')){
stack.pop();
继续;
}
如果(c==']'&&&!stack.isEmpty()&&stack.peek()=='['){
stack.pop();
继续;
}
如果(c='}'| | c=')'| | c=='['){
堆栈推送(c);
打破
}
}//结束
System.out.println(stack.isEmpty());
}//结束时
}//末端总管
}//结束类

在循环内部,while循环的每次迭代都会创建一个全新的堆栈。如果将其放在类级别,则在程序的生命周期内只会创建一个堆栈

只有当您有多行输入时,这才会有所不同

如果您只使用一个堆栈,那么该堆栈还将包括前一行输入中的括号,这使得:

{
false
}
true
首先,我输入了
{
。这不平衡,因此
为false
。在下一行中,我输入了
}
。它不平衡,但输出为
true
。这是因为上一行的
{
仍在堆栈中!这就是为什么您应该为每一行创建一个新堆栈的原因(每隔一段循环迭代)

另一种方法是将堆栈置于类级别,但在每次迭代开始时调用
clear

    while (sc.hasNextLine()) {
        stack.clear(); // <----
        String input=sc.nextLine();
        for( char c : input.toCharArray() ){
while(sc.hasNextLine()){

Stask.Car();//在while循环之外,堆栈将检查整个输入文本,而不是逐行扫描。哦,好的:谢谢。谢谢,感觉真棒。如果你认为我的答案能回答你的问题,请考虑点击这个复选标记来接受它。@ Akangsasigh