为什么我的代码会让我超出范围异常?

时间:2016-03-28 19:04:59

标签: java helpers polish

我有这样一个程序:

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');

但它没有成功。

对于任何错误抱歉;我不会说英语。

2 个答案:

答案 0 :(得分:1)

这段代码:

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()时)你得到了例外。

答案 1 :(得分:0)

您似乎希望实现恒定班次的文本解密。

您的代码存在一些问题:

  1. 不考虑大写字母和非字母
  2. 循环语句错误
  3. 没有解密
  4. 这是一个例子

    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!"