-3

我应该从文本文件中读取并计算一个句子是 PANGRAM(使用字母表中的所有字符)、PERFECT pangram(使用字母表中的每个字符一次)还是两者都不是。指南说我应该用'0'初始化x,然后遍历句子中的每个字母,如果字母与字母表中的字符匹配,我将x加1;然后在最后,如果每个句子的值 x 有一个 '0',它不是,如果它是所有 '1',它是完美的,如果没有 '0',它是 PANGRAM。

Scanner pangram = new Scanner ( 
PerfectPangram.class.getResourceAsStream ( "pangram.txt" ));
    while (pangram.hasNext())
    {
        String text = pangram.nextLine().toUpperCase();

        char [] alphabet = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

        char txt[] = text.toCharArray();
        int zero[] = new int [text.length()];
        for(int i = 0; i < zero.length; i++)
        {
            zero[i] = 0;
        for (int a = 0; a < text.length(); a++) 
        {   
            zero[i] = txt[a];
        for (int array = 0; array < alphabet.length; array++) 
        {           
        if (alphabet[array] == text.charAt(i)) 
        {
            zero[i]++;              
        }
        }
        }
        if (zero[i] == 1) 
        {   
        }
        }   
    }

输出应该是这样的:

潘格拉姆:快棕色狐狸跳过懒狗。

两者都没有:您的所有基地都属于我们;有人给我们设了炸弹。完美:新工作:修理格鲁克先生的朦胧电视,PDQ。

4

1 回答 1

0

我猜你全都错了。首先,您的计数器数组(零)被初始化为错误的长度。它的固定长度应该是'Z'(90) - 'A'(65) + 1 = 26,就像拉丁字母表中的字母数一样。然后你应该增加表示字符在字母表中位置的计数器数组的索引(c - 'A'),但前提是字符是字母表的一部分(c >= 'A' && c <= 'Z') . 一旦你对句子中的每个符号都这样做了,你现在应该遍历零的成员,并找出它们中的任何一个是否低于 1:不是 pangram;或任何高于 1:不是完美的 pangram;

我将发布一些我的蹩脚代码只是为了演示它,但我不建议你把它作为你的最后作业;)我希望你掌握了基础知识,你现在可以自己做。

public static void main(String[] args) {

    String test = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.\nALL YOUR BASE ARE BELONG TO US; SOMEONE SET US UP THE BOMB.\nNEW JOB: FIX MR GLUCK'S HAZY TV, PDQ.";

    Scanner pangram = new Scanner (test);

    int zero[] = new int ['Z' - 'A' + 1];

    while (pangram.hasNextLine())
    {
        Arrays.fill(zero, 0);

        String text = pangram.nextLine().toUpperCase();

        for (char c : text.toCharArray())
        {
            if (c >= 'A' && c <= 'Z') {
                zero[c - 'A']++;
            }
        }

        boolean isPangram = true;
        boolean isPerfectPangram = true;

        for (int i : zero) {
            if (i < 0) {
                isPangram = false;
                break;
            }
            if (i > 1) {
                isPerfectPangram = false;
            }
        }

        System.out.println(isPerfectPangram ? "Prefect Pangram" : isPangram ? "Pangram" : "Neither");
    }
}
于 2018-02-20T16:19:01.447 回答