当前位置: 首页 > 知识库问答 >
问题:

请给我解释一下代码的这些部分

舒仲渊
2023-03-14

我需要检查输入字符串中的平衡表达式。通过阅读找到Java代码的指南和一些youtube视频,我了解了它的大部分代码是如何工作的。但有些部分我还是不明白,我给这些部分添加了注释。

package homework;
import java.util.Stack;
import java.util.Scanner;
public class homewokr2 {

    public static void main(String[] args) {
        Scanner myScan = new Scanner(System.in);
         System.out.println("enter code for which to check if expression is balanced ");
        
        String code = myScan.next();
    
         String checkBalancedExpr1=checkBalancedParentesis("" +code);
         System.out.println(""+checkBalancedExpr1);
    
         myScan.close();
 }
 public static String checkBalancedParentesis(String expr)
 {
 if (expr.isEmpty())    *// why is it (expr) should it not be (stack.isEmpty)?*
 return "Balanced";
 Stack<Character> stack = new Stack<Character>();
 for (int i = 0; i < expr.length(); i++)
 {
 char current = expr.charAt(i);
 if (current == '{' || current == '(' || current == '[')
 {
 stack.push(current);
 }
 if (current == '}' || current == ')' || current == ']')
 {
 if (stack.isEmpty())
 return "Not Balanced";
 char last = stack.peek();
 if (current == '}' && last == '{' || current == ')' && last == '(' || current == ']' && last == '[')
 stack.pop();
 else 
 return "Not Balanced";
 }
 }
 return stack.isEmpty()?"Balanced":"Not Balanced"; // i dont rly get this part of it
 }
}

共有1个答案

宿丰
2023-03-14

如果(expr.IsEmpty())*//为什么它是(expr)而不是(stack.IsEmpty)?*返回“平衡”;

这只是检查一个边缘条件:如果您用一个完全空的字符串调用这个方法,那么它显然是平衡的。这就是我们所做的一切。

这也是完全没有必要的:如果您删除了这些html" target="_blank">代码,它的工作原理仍然是一样的:毕竟,有0个表达式,因此主for循环(循环通过输入字符串中的每个字符)将循环0次(嘿,空字符串,没有字符,所以没有循环),因此堆栈显然是空的,它返回'balanced'。

返回stack.isEmpty()?“balanced”:“not balanced”;//我不知道这部分内容

如果stack对象(表示。。。一个堆栈,因此得名)为空,那么它是平衡的。如果看完每个角色后,仍然有一些东西在那里,那么它就不是了。下面是一个简单的例子:

给定输入(hello(),则。。。

for循环运行8次;每个角色一次。第一次运行时,它会看到第一个(并将其放在堆栈上。第二次运行时,它会看到第二个(并将其放入堆栈;现在,堆栈是['(','(']。在接下来的5次运行中,它看到的是'h','e','l','o',这些都被完全忽略,没有任何作用。在第8次运行中,它看到的是')',它匹配为当前堆栈顶部的等价物(top of stack=stack.peek()),因此堆栈被弹出:它的顶部被移除,现在堆栈又回到了简单的['(']

现在循环结束,因为我们用完了字符。假设堆栈不是空的,它是不平衡的,并返回。

 类似资料:
  • 问题内容: 我已经阅读了数百篇有关Java中“ this”的解释,但是我真的很难理解它。我正在并行学习android和java,我知道这样做比较难,但是我很喜欢。我被杀死的一件事是“ this”。我正在粘贴下面一次使用“ this”的教程中的代码。我本打算只编写一段代码,但希望尽可能提供帮助。 我正在寻找可以添加到笔记中的“ this”的良好解释。任何和所有帮助表示赞赏。提前致谢。 示例代码从下面

  • 我这里有一些关于Java的练习问题。我们应该在不使用编译器的情况下确定答案。 参考以下方法: 调用product(6)时的输出是什么? D)48 E)70 根据答案,正确的输出是48。我真的不明白为什么这是真的。6不符合基本情况,所以转到else语句。那么,乘积(6-2)=乘积(4),乘积(2)得到乘积(0),乘积(2)得到乘积(0),得到6*4,4*2,2*0,0*0。但那是32,不是48?是不

  • 我有这两种方法。我理解“getTotalSalary”一词,但并不真正理解“getAverageSalary(获取平均工资)”的写作方式。我不明白为什么在结尾处使用问号和冒号以及“(size()!=0)”和0。 这是编码: empReg 是 ArrayList 的名称。员工是一个由“姓名”和“薪水”组成的阶级。getSalary 显然是一种返还薪水的方法。

  • args) 请解释为什么我们在这里制作参数数组以及为什么它是静态的,什么是 args []。

  • 我不太理解while循环中的条件,以及它代表什么'>>>='。

  • 问题内容: 问题答案: 作用 在你的Chrome浏览器的控制台中输入这段代码,你会发现不同HTML层都被使用不同的颜色添加了一个高亮的边框。是不是非常酷?但是,简单来说,这段代码只是首先获取了所有的页面元素,然后使用一个不同的颜色为它们添加了一个1px的边框。 解析 => 调用引用数组的forEach方法 => => => 对二进数1小数点右移24位 => 获得了一个位于之间的随机整数,也就是随机

  • 这是我从骡子3到骡子4转换的第一个项目。我与mule4一起工作,但在Mule3是新的。有谁能帮帮我吗?你能告诉我这些自定义处理器和变压器在这个mule3代码中的用途吗?而Mule4中的等价代码会是什么呢?在骡子4中没有像这样的自定义变压器。请帮帮我..

  • 当我尝试编译这段代码时,Eclipse会出现以下两个错误: > 用于函数:maxmin的非法修饰符;只允许最终 对于:Mn不能解析为变量 为什么会出现这两个错误? 我想这可能已经回答了这个问题,但我不明白其中使用的术语。 这是我的代码: