0

每当我尝试执行此代码时,只要我输入一个字母的单词,它就会返回一个错误,尽管编译很好并且使用任何其他单词超过一个字母的短语\

我很困惑为什么会这样,因为一切都应该返回正常,但是每当代码通过一个字母单词时,它会自动停止程序并结束它

import javax.swing.*;
// The "PigTrans" class.
public class PigTrans
{
public static void main (String[] args)
{

    String userInput;
    userInput = JOptionPane.showInputDialog (null, "Please enter a word");

    System.out.println (PigTrans.pigTranslator (userInput));

} // main method


public static String pigTranslator (String word)
{


    int[] anArray;
    String phrase = "";
    String[] words = word.split ("\\s+");

    String[] newWord = new String [words.length];


    for (int i = 0 ; i < words.length ; i++)


        {
            char number;
            number = words [i].charAt (0);
            int ascii;

            ascii = (int) number;
            if (word.length () <= 1)
            {
                if ((ascii >= 48) && (ascii <= 57))
                {
                    newWord [i] = words [i];
                    phrase = phrase + newWord [i] + " ";
                }
                else
                {
                    newWord [i] = words [i];
                    phrase = phrase + newWord [i] + " ";
                }
            }


            else if ((ascii >= 65) && (ascii <= 90)) //Checks if the word begins with a capital
            {

                char word2;
                word2 = words [i].charAt (0);
                if (startsWithQU (words [i]) == true)
                {
                    newWord [i] = words [i].substring (2);
                    newWord [i] = newWord [i] + "quay";
                }

                else if (checkAscii (word2) == true)
                {
                    newWord [i] = words [i] + "way";
                }
                else
                {
                    String letter = "";
                    letter = words [i].substring (0, 1);
                    newWord [i] = words [i].substring (1);
                    newWord [i] = newWord [i] + letter + "ay";
                }
                String firstLetter, restOfWord, FirstLetter2;
                firstLetter = newWord [i].substring (0, 1);
                restOfWord = newWord [i].substring (1);
                restOfWord = restOfWord.toLowerCase ();
                firstLetter = firstLetter.toUpperCase ();
                newWord [i] = firstLetter.concat (restOfWord);


                phrase = phrase + newWord [i] + " ";
            }
            else
            {
                char word2;
                word2 = words [i].charAt (0);
                if (startsWithQU (words [i]) == true)
                {
                    newWord [i] = words [i].substring (2);
                    newWord [i] = newWord [i] + "quay";
                }

                else if (checkAscii (word2) == true)
                {
                    newWord [i] = words [i] + "way";
                }
                else
                {
                    String letter = "";
                    letter = words [i].substring (0, 1);
                    newWord [i] = words [i].substring (1);
                    newWord [i] = newWord [i] + letter + "ay";
                }
                phrase = phrase + newWord [i] + " ";
            }

        }



    return phrase;
} //pigTranslator


public static boolean checkAscii (char letter)
{
    boolean correct = false; //Declares the boolean variable as false

    int ascii;

    ascii = (int) letter;

    if ((ascii == 65) || (ascii == 69) || (ascii == 73) || (ascii == 79) || (ascii == 85) || (ascii == 97) || (ascii == 101) || (ascii == 105) || (ascii == 111) || (ascii == 117))
    {
        correct = true;
    }

    return correct;
} // PigMethods class

public static boolean startsWithQU (String word)
{
    boolean checkQU = false; //Declares variables needed to check for "qu." Program takes two letters from the word and check if it starts with "qu."
    String QUcheck;

    QUcheck = word.substring (0, 2);

    if (QUcheck.equalsIgnoreCase ("qu")) //When the word starts with "qu, return of boolean value becomes true."
    {
        checkQU = true;
    }

    return checkQU; //If return value is not true, the varuiable returns the value of checkQU.

} //startsWithQU
 } // PigTrans class
4

1 回答 1

0

问题出在这条线上:

number = words [i].charAt (0);

当您输入一个字母和一个空格时,该split方法会创建一个 2 元素数组 - 第一个元素是字母,第二个元素是空字符串。所以 charAt(0) 显然会为空字符串抛出错误!

解决方案是在trim将字符串提供给split方法之前对其进行处理。

此外,在该行中:

if (word.length () <= 1)

条件应该可能是== 1因为你不能对长度为 0 的字符串做任何事情。

于 2014-05-12T05:38:36.547 回答