Java中的StringIndexOutOfBoundsException

时间:2012-12-10 23:55:00

标签: java eclipse exception encryption

我正在使用Eclipse。我需要创建一个加密和解密的程序以及用户输入的单词,但是当我选择加密时,我在线程“main”中得到异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0     在java.lang.String.charAt(未知来源)     在Encryption.encrypt(Encryption.java:43)     在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);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

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

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

例如,表示从0开始,在循环结束时将i递增1,停止循环WHEN i&lt; 10不再为真。

答案 1 :(得分:0)

您正在将消息重置为空白然后尝试迭代消息

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


        for (message.length();;)
        {

答案 2 :(得分:0)

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