我正在使用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);
}
}
}
}
答案 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)
您正在访问空字符串的第一个字符。因此例外。