-4

私はエクリプスを使用しています。ユーザーが入力した単語を暗号化および復号化するプログラムを作成する必要がありますが、暗号化を選択すると、スレッド "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String で例外が発生します。 Encryption.main(Encryption.java:118) の Encryption.encrypt(Encryption.java:43) の charAt (不明なソース)

これが私のコードです:

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 ずつインクリメントし、ループを停止することを意味します。

于 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 に答える