indexOf之后无法将字符串传递给方法

时间:2015-03-12 19:31:26

标签: java

我差不多完成了一个程序,它接受用户输入并加密消息然后显示回来。由于某种原因,我无法将字符串传递给我的加密方法并返回它。有谁知道我哪里出错了?

非常感谢任何回复的人!

public static String doEncryption(String s)
{
    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 key[] = { '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', 'a' };

    char encoded[] = new char[(s.length())];
    String encrypted="";
    int j=0;
    for(int i=0; i<s.length(); i++){
        //System.out.println(s.charAt(i));
        boolean isFound = false;
        j = 0;
        while (j < alphabet.length && !isFound){


            if (alphabet[j]==s.charAt(i)){
               encrypted=encrypted+key[j];
               isFound=true;
            }
            j++; 
        }

        if(j>=alphabet.length){
            encrypted=encrypted+s.charAt(i);
        }
       }        
    return (new String(encrypted));
}


public static void main(String args[])
{
    String match = "QUIT";
    String en = "";
    System.out.println("Welcome to the Encoding Program!");
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the text you want encoded below.  Type QUIT when finished. ");
    en = sc.nextLine();
    String trim = en.substring(0, en.indexOf("QUIT"));
    doEncryption(trim.toLowerCase());
    //String en = doEncryption(sc.nextLine().toLowerCase());
    System.out.println("The text is encoded as: " + trim.toUpperCase());
    sc.close();
}

}

2 个答案:

答案 0 :(得分:2)

您的方法返回更新后的字符串,因此您在调用时希望使用该返回值。变化:

doEncryption(trim.toLowerCase());

String updatedValue = doEncryption(trim.toLowerCase());
如果您愿意,请

重新使用trim

trim = doEncryption(trim.toLowerCase());

...然后使用updatedValuetrim来显示结果。

答案 1 :(得分:2)

只是因为你永远不会重新分配价值。

更改

doEncryption(trim.toLowerCase());

trim = doEncryption(trim.toLowerCase());

然后System.out.println("The text is encoded as: " + trim.toUpperCase());将显示正确的值。

小心这一行

en.substring(0, en.indexOf("QUIT"));

如果&#34; QUIT&#34;它会抛出java.lang.StringIndexOutOfBoundsException。不在字符串中。

我认为你希望程序执行直到&#34; QUIT&#34;输入,所以你需要循环,直到输入是&#34; QUIT&#34;。你的主要方法看起来像这样

String match = "QUIT";
String en = "";
System.out.println("Welcome to the Encoding Program!");
Scanner sc = new Scanner(System.in);
System.out.println("Enter the text you want encoded below.  Type QUIT when finished. ");
do
{
    en = sc.nextLine();

    if(!en.toUpperCase().equals(match))
    {
        en = doEncryption(en.toLowerCase());

        System.out.println("The text is encoded as: " + en.toUpperCase());
    }
} while(!match.equals(en.toUpperCase()));
sc.close();

如果要退出,只需输入quit。