使用字符和字符串时出错(java)

时间:2018-10-24 18:47:12

标签: java

我的程序的输出是“ Afmmz Ampq”。它应该是“ Cfmmz Gmpq”。这只用大写字母出现,因此应该来自编程的这一部分。

char newLetter=alphabet.charAt(newLetterIndex);
            if (Character.isUpperCase(letter)==true){
                char upper = Character.toUpperCase(newLetter);
                newLetter=upper;

这是上下文的完整代码

public static void main(String[] args) {
    String word= ("Belly Flop");
    int x=1; //decoding variable, for Captain Crunch it is 13
    crunch (word, x);
}
public static void crunch(String word,int x) {
    String alphabet= ("abcdefghijklmnopqrstuvwxyz");
    int index=0;
    while (index<word.length()) {
        char letter=word.charAt(index);
        if (letter==' ') {
            System.out.print (" ");
            index++;
        } else {
            int letterIndex=alphabet.indexOf(letter);
            int newLetterIndex=letterIndex+x;
            if (newLetterIndex>25){
                newLetterIndex=newLetterIndex-25;
            }
            if (newLetterIndex<0){
                newLetterIndex=newLetterIndex+25;
            }
            char newLetter=alphabet.charAt(newLetterIndex);
            if (Character.isUpperCase(letter)==true){
                char upper = Character.toUpperCase(newLetter);
                newLetter=upper;
            }
            System.out.print (newLetter);
            index++;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我稍微改变了你的

        boolean isUpper = Character.isUpperCase(letter);
        int letterIndex=alphabet.indexOf(Character.toLowerCase(letter));
        int newLetterIndex=letterIndex+x;
        if (newLetterIndex>25){
            newLetterIndex=newLetterIndex-25;
        }
        if (newLetterIndex<0){
            newLetterIndex=newLetterIndex+25;
        }
        char newLetter=alphabet.charAt(newLetterIndex);
        if (isUpper){
            char upper = Character.toUpperCase(newLetter);
            newLetter=upper;
        }
        System.out.print (newLetter);
        index++;

当找到大写字母时,应该先转换成小写字母

答案 1 :(得分:0)

如果我对您的理解正确,那么您想要做的就是将字母移动1。 这意味着:a-> b,b-> c,...,z-> a,A-> B,B-> C,...,Z-> A

您的代码和大写字母的问题是此行:

int letterIndex=alphabet.indexOf(letter);

当您在'A'中搜索String alphabet= ("abcdefghijklmnopqrstuvwxyz");时,结果始终为0。原因是找不到字符'A'

在上述行中使用Character.toLowerCase()时可以解决此问题,

char letterLowerCase = Character.toLowerCase(letter);
int letterIndex=alphabet.indexOf(letterLowerCase);

除此之外:

  • 您可以将for循环而不是while循环与index-variable结合使用。
  • 您可以使用%-operator,而不是检查newLetterIndex> 25并从newLetterIndex中减去它。

以下是您的紧缩方法的另一种版本:

public static void crunch(String word,int x) {
    String alphabet= ("abcdefghijklmnopqrstuvwxyz");

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


        if (word.charAt(i)==' ') {
            System.out.print (" ");
        } else {

            int letterIndex=alphabet.indexOf(Character.toLowerCase(word.charAt(i)));
            int newLetterIndex= (letterIndex+x)%25;

            if (newLetterIndex<0){
                newLetterIndex=newLetterIndex+25;
            }

            char newLetter=alphabet.charAt(newLetterIndex);

            if (Character.isUpperCase(word.charAt(i))==true){

                newLetter=Character.toUpperCase(newLetter);
            }
            System.out.print (newLetter);

        }
    }
}