Java Ceaser Cipher程序无法正常工作

时间:2016-06-22 08:39:31

标签: java debugging

我的程序应该打印出一个字符串,而是在用户输入消息中为每个小写字母输出100,每个大写字母输出68。

对于帮助我的计划工作或使我的计划更好的代码,可以说任何积极和有建设性的事情都将受到高度赞赏。

我认为我的错误是在我的主要或calcOffset中。

感谢。

 import java.util.Scanner;

class CeaserCipher{

    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'};

    public static void main(String[] args){
        String in;
        int off;


        Scanner sc = new Scanner (System.in);

        System.out.println("Message: ");
        in = sc.nextLine();

        System.out.println("Offset: ");
        off = sc.nextInt();

        String out = new CeaserCipher().ceaser(in, off);

        System.out.println(out);

    }

    public String ceaser(String in, int off){

        char[] useMe = in.toCharArray();

        String output = " ";

        for(int j=0; j!=useMe.length; j++){
            if(Character.isUpperCase(useMe[j]))
                output += Character.toUpperCase(calcOffset(getIndex(useMe[j]), off));
            else
                output += calcOffset(getIndex(useMe[j]), off);
        }
        return output;
    }
    public int getIndex(char letter){

        if (Character.isUpperCase(letter)){
            letter = Character.toLowerCase(letter);
        }
        for (int i = 0; i != Alphabet.length; i++){
                return i;
            }
            return 999;
        }

    public int calcOffset(int index, int off){

        if((index + off) < 0){
            int newIndex = 26 + (index+off);

            return Alphabet[newIndex];
        }
        if((index + off) > 25){
            int newIndex = (index+off) - 26;

            return Alphabet[newIndex];
        }
        if((index + off) >= 0 && (index + off) < 25){
            int newIndex = (index + off);

            return Alphabet[newIndex];
     }

     return 'X';
    }

  }

1 个答案:

答案 0 :(得分:0)

getIndex方法中的代码导致问题 -

for (int i = 0; i < Alphabet.length; i++){
            return i;
        }

对我来说,似乎你总是返回0,因此你的calcOffset也返回相同的值。纠正它你应该得到正确的结果。 希望有所帮助。