CnMarijuana 2017-10-24 09:53 采纳率: 0%
浏览 387

字符串数组长度和其他问题

在刷PAT乙级第三个题,看了两天了弄不出来,
感觉判断算法没问题,但是在主类中调用的时候就会出现错误。
详见图


import java.util.Scanner;

public class Test
{
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        String[] arr = new String[n];
        for(int i = 0; i < arr.length; i++)
        {
            arr[i] = cin.nextLine();
        }
        for(int i = 0; i < arr.length; i++)
        {
            if(Tool.judge(arr[i]))
            {
                System.out.println("YES");
            }
            else
            {
                System.out.println("NO");
            }
        }
    }
}

class Tool
{


    public static boolean judge(String str)
    {
        int pNum = 0;
        int tNum = 0;
        int aNum = 0;
        for( int i = 0; i < str.length(); i++)
        {
            switch(str.charAt(i))
            {
            case'P': pNum += 1; break;
            case'T': tNum += 1; break;
            case'A': aNum += 1; break;
            default: return false;
            }
        }
        if(pNum != 1||tNum != 1)
        {
            return false;
        }
        str = str.substring(str.indexOf('P'));
        if(str.indexOf('P') > str.indexOf('A')||str.indexOf('P') > str.indexOf('T')||str.indexOf('A') > str.indexOf('T'))
        {
            return false;
        }
        if((str.indexOf('T')-str.indexOf('P')) > 3)
        {
            return false;
        }
        return true;
    }
}

图片说明

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 02:15
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码的目的是检查一个给定的字符串是否符合特定的规则。这个规则是:字符串中必须包含两个不同的字符(包括字母和数字),并且这两个字符都必须出现在字符串中的同一个位置(即第一个字符的位置)。如果满足这些条件,则输出“YES”,否则输出“NO”。

    然而,在你的测试程序中,当你尝试运行 main 方法时,它会抛出一个异常:

    java.lang.NullPointerException
    at Test.main(Test.java:9)
    

    这表明你没有正确地初始化 Scanner 对象。你应该首先创建一个新的 Scanner 对象来读取输入,并将其传递给 main 方法。

    这是修复后的代码:

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner cin = new Scanner(System.in);
            int n = cin.nextInt();
            String[] arr = new String[n];
            for(int i = 0; i < arr.length; i++) {
                arr[i] = cin.nextLine();
            }
    
            for(int i = 0; i < arr.length; i++) {
                if(Tool.judge(arr[i])) {
                    System.out.println("YES");
                } else {
                    System.out.println("NO");
                }
            }
        }
    
        private static boolean judge(String str) {
            int pNum = 0, tNum = 0, aNum = 0;
            for (int i = 0; i < str.length(); i++) {
                switch (str.charAt(i)) {
                    case 'P':
                        pNum++;
                        break;
                    case 'T':
                        tNum++;
                        break;
                    case 'A':
                        aNum++;
                        break;
                    default:
                        return false;
                }
            }
            if (pNum != 1 || tNum != 1) {
                return false;
            }
            str = str.substring(str.indexOf('P'));
            if (str.indexOf('P') > str.indexOf('A') || str.indexOf('P') > str.indexOf('T') || str.indexOf('A') > str.indexOf('T')) {
                return false;
            }
            if ((str.indexOf('T') - str.indexOf('P')) > 3) {
                return false;
            }
            return true;
        }
    }
    

    现在你可以将这段代码复制到你的 Java 环境中进行测试。如果你仍然遇到问题,请提供更多的信息,以便我能帮助你解决问题。

    评论

报告相同问题?