首页 > 解决方案 > 在java中实现一个方法来检查正确性

问题描述

我在这里进行了评估,并提供了一个解决方案,但是当我运行代码时,结果很奇怪。这是评估:“给你一个由括号( )和方括号[ ]组成的字符序列。

这种类型的 String 被认为是正确的:

输入:字符串最多包含 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

我该如何解决?

标签: java

解决方案


我不会回答如何正确地做到这一点;我会回答为什么你有什么是错的:

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;

此时,您已将值分配nullstr1str2。所以你打电话

     if (check(null)==true && check(null)==true) {

并且,因为check(null)为真,条件评估为真,因此您从该方法返回真。

因此,您的方法永远无法返回false


推荐阅读