为什么我的代码给我一个超出范围的异常?
Why is my code giving me an out of range exception?
我有这样一个程序:
import java.util.Scanner; import java.io.*;
class C { public static void main (String[] args) throws IOException{
System.out.println("Wpisz teks do zakodowania: ");
String tekst;
Scanner odczyt = new Scanner(System.in);
tekst = odczyt.nextLine();
System.out.println("Tekst odszyfrowany:" + tekst);
char[]alfabet = {'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'};
int dlugalf=26;
System.out.print("Tekst zaszyfrowany:");
int a = 0;
for(int i=0;;){
System.out.print(tekst.charAt(a));
a++;
}
}
}
启动后,您应该查看问题并要求您输入文本。然后它应该显示我写的符号,并且程序必须单独加载这些字母中的每一个,而不是作为一个完整的字符串。但是随后弹出错误:
Exception in thread "main" java.lang.StringIndexOut OfBoundsException: String index out of range: 10
at java.lang.String.charAt(Unknown Source)
at C.main(C.java:34)
这是一个空字符串造成的。我怎样才能摆脱它?我试过这个命令:
if (!tekst.isEmpty() && tekst.charAt(0) == 'R');
但没有成功。
对于任何错误,我们深表歉意;我英语不是很好
这段代码:
int a=0;
for(int i=0;;){
System.out.print(tekst.charAt(a));
a++;
}
应该变成
for(int a=0;a<tekst.length();a++){
System.out.print(tekst.charAt(a));
}
实际上,您的循环将尝试永远进行下去。您 运行 超出了字符串中的字符(当 a=tekst.length()
时),您得到了异常。
看来你是想实现常量shift的文本解密
您的代码存在一些问题:
- 它不考虑大写字符和非字母
- 循环语句错误
- 没有解密
这是一个例子
final int shift = 1;//any shift here
final int alhpabetLength = 'z' - 'a';
String input = scanner.nextLine();
input = input.toLowerCase();
for (char c : input.toCharArray()) {
if (c >= 'a' && c <= 'z') {
int position = c - 'a';
int decryptedPosition = (position + shift + alhpabetLength) % alhpabetLength;
char decryptedC = (char)(decryptedPosition + 'a');
System.out.print(decryptedC);
} else {
System.out.print(c);
}
}
如果你使用 shift = -1
而不是加密行 "ifmmp!"
你会得到 "hello!"
我有这样一个程序:
import java.util.Scanner; import java.io.*;
class C { public static void main (String[] args) throws IOException{
System.out.println("Wpisz teks do zakodowania: ");
String tekst;
Scanner odczyt = new Scanner(System.in);
tekst = odczyt.nextLine();
System.out.println("Tekst odszyfrowany:" + tekst);
char[]alfabet = {'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'};
int dlugalf=26;
System.out.print("Tekst zaszyfrowany:");
int a = 0;
for(int i=0;;){
System.out.print(tekst.charAt(a));
a++;
}
}
}
启动后,您应该查看问题并要求您输入文本。然后它应该显示我写的符号,并且程序必须单独加载这些字母中的每一个,而不是作为一个完整的字符串。但是随后弹出错误:
Exception in thread "main" java.lang.StringIndexOut OfBoundsException: String index out of range: 10
at java.lang.String.charAt(Unknown Source)
at C.main(C.java:34)
这是一个空字符串造成的。我怎样才能摆脱它?我试过这个命令:
if (!tekst.isEmpty() && tekst.charAt(0) == 'R');
但没有成功。
对于任何错误,我们深表歉意;我英语不是很好
这段代码:
int a=0;
for(int i=0;;){
System.out.print(tekst.charAt(a));
a++;
}
应该变成
for(int a=0;a<tekst.length();a++){
System.out.print(tekst.charAt(a));
}
实际上,您的循环将尝试永远进行下去。您 运行 超出了字符串中的字符(当 a=tekst.length()
时),您得到了异常。
看来你是想实现常量shift的文本解密
您的代码存在一些问题:
- 它不考虑大写字符和非字母
- 循环语句错误
- 没有解密
这是一个例子
final int shift = 1;//any shift here
final int alhpabetLength = 'z' - 'a';
String input = scanner.nextLine();
input = input.toLowerCase();
for (char c : input.toCharArray()) {
if (c >= 'a' && c <= 'z') {
int position = c - 'a';
int decryptedPosition = (position + shift + alhpabetLength) % alhpabetLength;
char decryptedC = (char)(decryptedPosition + 'a');
System.out.print(decryptedC);
} else {
System.out.print(c);
}
}
如果你使用 shift = -1
而不是加密行 "ifmmp!"
你会得到 "hello!"