如何循环回到表的开头[java]

hi3rlvi2  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(466)

这个问题在这里已经有答案了

java,如何实现移位密码(凯撒密码)(5个答案)
上个月关门了。
我需要写一条信息,然后在每个字母后面加上一个数字
例如:如果我的信息是d,并且选择的数字是5,那么我的信息必须变成fghi。
我只是创建了一个for循环遍历表char,并创建了一个包含字母表中所有字母的表和每个字母的开关大小写。我以为这就像python一样,我可以循环到表的开头,但它告诉我索引越界了。我的可能性是什么?

char[] abc = {'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'};
        for (int i = 0; 1 <= mesgIn.length; i++){
            switch(mesgIn[i]) {
                case 'a' -> mesgIn[i] = mesgIn[rot];
                case 'b' -> mesgIn[i] = abc[1 + rot];
                case 'c' -> mesgIn[i] = abc[2 + rot];

编辑:int rot是我想做的字母旋转数。等于用户想要的wtv
编辑2:找到一个更容易的方法。我只是在[]中添加了两次字母表,所以[0]是'a',但是[26]也是'a'

rt4zxlrg

rt4zxlrg1#

索引开始于 0 在一个 String 最后一个索引是字符串的长度减去 1 . 因此,循环的终止条件应该是 i < mesgIn.length() . 此外,还可以使用 char 价值观就像你对待 int 价值观。

public class Main {
    public static void main(String args[]) {
        char[] abc = { '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' };
        String mesgIn = "wxyz";
        int n = 5;
        for (int i = 0; i < mesgIn.length(); i++) {
            System.out.print((char) ((mesgIn.charAt(i) - 'a' + n) % 26 + 'a'));
        }
    }
}

输出:

bcde
o4hqfura

o4hqfura2#

您还可以将一些标准数据结构与定义良好的方法结合使用。

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    String[] messages = {"abc", "xyz"};
    int rot = 5;
    List<Character> alphabets =
        Arrays.asList(
            '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');
    for (String message : messages) {
      for (int i = 0; i < message.length(); i++) {
        char originalChar = message.charAt(i);
        int indexInAlphabets = alphabets.indexOf(originalChar);
        System.out.print(alphabets.get((rot + indexInAlphabets) % alphabets.size()));
      }
      System.out.print("\n");
    }
  }
}

输出

fgh
cde

相关问题