gpt4 book ai didi

java - 消息解码/加密程序输出 JAVA

转载 作者:行者123 更新时间:2023-11-29 05:10:10 26 4
gpt4 key购买 nike

我对我写的程序正在输出的东西感到很困惑。该程序的目的是解码/编码为一种称为 Caesar Shift 的代码,它基本上只是获取单词/句子的每个字母并通过“shift 键”将其向右移动。 (例如 ab 和 shift 键 1 = bc)。

我设置了程序,它要求用户加密/解密,然后是他们想要编码/解码的消息,然后是 shift 键。我的编码/解码功能都遇到了同样的问题。对于这个问题,我将重点关注编码问题,因为它们几乎相同。

基本上,我设置了编码函数,以便它采用字符串消息和 int ShiftKey 参数。我有一个包含消息的每个单独字母的字符串数组。我的计划是遍历数组/单词中的每个字母,找到它在字母表中的当前索引,并向其添加 shift Key,它存储在 int finalIndex 中。我在索引 finalIndex 处附加字母表中的字母,最后打印出这个词。

public static void encode(String message, int shiftKey)
{
String [] array = message.split("");
String encoded = "";
for (String a : array)
{
int finalIndex;
int index = alphabet.indexOf(a);
finalIndex = index + shiftKey;
encoded += alphabet.charAt(finalIndex);
}
System.out.println(encoded);
}

问题是当我运行程序时,输出是正确的,除了在编码短语的开头,总是有一个额外的字母,它是 shiftKey 处的字母表索引。例如,如果我使用 shift 键 1 键入消息“hi”,则它会输出“bij”,因为 b 是索引 1 处的字母表,而 hi 只是预期的 shift。

我已经尝试了所有方法,但我无法弄清楚为什么会这样。我确定这是此功能的问题,而不是其他任何地方,因为我尝试隔离不同的区域以查看问题出在哪里。

任何帮助将不胜感激。谢谢。

完整代码

import java.util.*;
import java.io.*;
public class CaesarShiftTester
{
public static void main (String[] args)
{
boolean running = true;
while (running){
Scanner in = new Scanner (System.in);
System.out.println("Encryption or Decryption? (E/D): " );
String answer = in.next();

if (answer.equalsIgnoreCase("e"))
{
System.out.println("Enter message: ");
String message = in.next();
System.out.println("Enter Shift Key: " );
int shiftKey = in.nextInt();
CaesarShiftEncryption.encode(message, shiftKey);

System.out.println("Quit? (Y/N): ");
String again = in.next();
if (again.equalsIgnoreCase("Y"))
running = false;
else
running = true;
}

else if (answer.equalsIgnoreCase("d"))
{
System.out.println("Enter message: ");
String message = in.next();
System.out.println("Enter Shift Key: " );
int shiftKey = in.nextInt();
CaesarShiftEncryption.decode(message, shiftKey);

System.out.println("Quit? (Y/N): ");
String again = in.next();
if (again.equalsIgnoreCase("Y"))
running = false;
else
running = true;
}
}


}
}

\

import java.io.*;
import java.util.*;
public class CaesarShiftEncryption
{
private static final String alphabet = "abcdefghijklmnopqrstuvwxyz";
public static void encode(String message, int shiftKey)
{
String [] array = message.split("");

String encoded = "";
for (String a : array)
{
System.out.println(a);

int finalIndex;
int index = alphabet.indexOf(a);
finalIndex = index + shiftKey;
System.out.println(finalIndex);
encoded += alphabet.charAt(finalIndex);
}
System.out.println(encoded);
}


public static void decode(String message, int shiftKey)
{
char shifted;
String encoded = "";
for (int i = 0; i < message.length(); i ++)
{
char nextChar = message.charAt(i);
shifted = (char)(nextChar - shiftKey);
encoded += shifted;
}
System.out.println("Encoded: " + encoded);
}
}

最佳答案

JDK问题。

考虑使用 JDK 8..

在 JDK 7 上,如果您执行 split(""),split 函数会在开头放置一个额外的元素。

如果无法更新,可以使用char[],或者跳过第一个(将增强的for循环更改为常规循环)

我测试了你的代码,它工作正常..这就是为什么如此困惑的原因..然后我将 JDK 更改为版本 7,并遇到了与你相同的问题。

关于java - 消息解码/加密程序输出 JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28869495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com