java - 在java中实现一个方法来检查正确性
问题描述
我在这里进行了评估,并提供了一个解决方案,但是当我运行代码时,结果很奇怪。这是评估:“给你一个由括号( )和方括号[ ]组成的字符序列。
这种类型的 String 被认为是正确的:
- 如果它是空字符串或空字符串
- 如果字符串A正确,则(A)和[A]正确
- 如果字符串A和B正确,则连接AB也是正确的
输入:字符串最多包含 10000 个字符。
示例:[( )]是正确的,(( )[ ])是正确的,( [ ) ]是不正确的,((是不正确的。
实现方法check(String str)来检查该类型字符串的正确性。 如果字符串正确,check返回true ,否则返回false。"
所以我在下面做了那个代码:
public class Solution {
public static boolean check(String str) {
String str1 = null,str2 = null;
if(str==null|| str.length()==0) return true;
if (check(str1)==true && check(str2)==true) {
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println(Solution.check("([])")); //true
System.out.println(Solution.check("()[]")); //true
System.out.println(Solution.check("([)]")); //false
System.out.println(Solution.check("((")); //false
System.out.println(Solution.check("[(()])")); //false
}
}
但我运行它,我得到:
true
true
true
true
true
我该如何解决?
解决方案
我不会回答如何正确地做到这一点;我会回答为什么你有什么是错的:
public static boolean check(String str) {
String str1 = null,str2 = null;
if(str==null|| str.length()==0) return true;
if (check(str1)==true && check(str2)==true) {
return true;
}
return false;
}
让我们更详细地看一下:
if(str==null|| str.length()==0) return true;
所以,如果你传入null
,它会返回 true。
if (check(str1)==true && check(str2)==true) {
return true;
}
return false;
此时,您已将值分配null
给str1
和str2
。所以你打电话
if (check(null)==true && check(null)==true) {
并且,因为check(null)
为真,条件评估为真,因此您从该方法返回真。
因此,您的方法永远无法返回false
。
推荐阅读
- c# - Linq 尝试在 groupBy 之后使用 Include
- android - 将 Unity Humaniod 导入 Android App 并传递实时数据
- python - 使用 pyautoit 在游戏中移动光标使光标始终向上/向下
- python - 我正在尝试修复值错误以防用户输入字母
- laravel - 如何将数据传递给所需的 vue 组件?
- python - 如何解决传递给 builtin_function_or_method.__format__ 的不受支持的格式字符串的问题
- c# - 您如何使调试一个 Web 项目依赖于运行另一个 Web 项目?
- c# - 是否可以基于聚合有条件地格式化 WPF 数据网格行?
- azure-ad-b2c - Azure B2C 页面自定义 - 使用超文本链接而不是 ClaimsProviderSelection 的按钮
- c++ - 使用非指针数据移动 ctor 和移动赋值运算符