-4

我正在使用 Eclipse。我需要制作一个程序来加密和解密用户输入的单词,但是当我选择加密时,我在线程“main”java.lang.StringIndexOutOfBoundsException中得到异常:字符串索引超出范围:java.lang.String处的0。 charAt(Unknown Source) at Encryption.encrypt(Encryption.java:43) at Encryption.main(Encryption.java:118)

这是我的代码:

import java.util.Scanner;

public class Encryption 
{
    public static String message = "";
    public static boolean hasMessage = false;
    public static boolean encrypted = false;
    static char a = 0; 
    static char b;
    static int w;
    static int x;
    static int y;
    static int z;



    public static void display()
    {
        System.out.println("Message: " + message + "\n");
    }

    public static void encrypt(String word)
    {
        if(!hasMessage)
        {
            System.out.println("No message");
            // Tell the user there is no message
        }
        else if(encrypted)
        {
            System.out.println("Message is already encrypted");
            // Tell the user the message is already encrypted
        }

        else
        {
            message = "";
            // Reset the message to blank


            for (message.length();;)
            {
                for (message.charAt(a);; a++) 
                {
                    int w = (int) a * 2;
                    int x = (int) w + 2;  
                    char y = (char) x; 
        }
            }

            //get char from each letter (increase char each time),  cast as int


        }
        System.out.println(message);
        encrypted = true;

        // Using the parameter word, modify message
        // to contain a new value following a predictable pattern
        // Hint:  alter each character's ASCII value by casting
        //        to an integer and using math operators

        // Display the new message
        // Set encrypted to true


    }

    public static void decrypt(String word)
    {
        if(!hasMessage)
        {
            System.out.println("No message");
            // Tell the user there is no message
        }
        else if(!encrypted)
        {
            System.out.println("Message not encrypted");
            // Tell the user the message is not encrypted

        }
        else
        {
            System.out.println(message);
            // Like encrypt, but in reverse
        }

    }

    public static void main(String[] args) 
    {  
        Scanner sc = new Scanner(System.in);
        int menuChoice = 0;

        while(menuChoice != 4)
        {
            System.out.println( "[1] Enter Word\n" + 
                    "[2] Encrypt\n" + 
                    "[3] Decrypt\n" + 
                    "[4] Quit\n");

            menuChoice = sc.nextInt();

            if(menuChoice == 1)
            {
                System.out.println("Input message");
                message = sc.next();
                // prompt user to input message
                // assign next word to the class-level variable message
                hasMessage = true;
                encrypted = false;
                // set hasMessage to true
                // set encrypted to false

            }
            else if(menuChoice == 2)
            {
                encrypt(message);
            }
            else if(menuChoice == 3)
            {
                decrypt(message);
            }
        }
    }
}
4

3 回答 3

3

你还不太了解 for 循环。您没有包含条件表达式。 for(initialize; condition; increment)是模式。你有for (message.charAt(a);; a++)哪个缺少条件。缺少条件默认为 true,这意味着循环永远继续。所以,a不断增加,直到charAt(a)炸弹。

for(int i=0; i<10; i++)

例如,表示从 0 开始,在循环结束时将 i 增加 1,当 i<10 不再为真时停止循环。

于 2012-12-11T00:02:14.713 回答
0

您正在将消息重置为空白,然后尝试对其进行迭代

        message = "";
        // Reset the message to blank


        for (message.length();;)
        {
于 2012-12-10T23:58:47.747 回答
0

您正在访问空字符串的第一个字符。因此例外。

于 2012-12-10T23:59:00.907 回答