gpt4 book ai didi

java - "Crypting"Java练习

转载 作者:行者123 更新时间:2023-12-01 12:21:43 24 4
gpt4 key购买 nike

我正在做一个练习,其中我需要将字符串中的字母替换为另一个字母(字母表中它前面的第四个字母)。我还必须消除除空格之外的所有非字母字符(“”)。到目前为止,我能够完成第一步(消除字符),但我无法替换字母。这是我的代码,它的最后一部分绝对不允许我正确替换字母,做你知道我做错了什么吗?

提前致谢

import java.util.Scanner;

public class Crypto {

static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
static final int DECALAGE = 4;

static Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {

System.out.println("Veuillez entrer une chaine de caracteres : ");
String s = scanner.nextLine();

// la chaine a coder
String aCoder = "";
// la chaine codee
String chaineCodee = "";


char [] ALPHA = new char [26];

for (int i = 0; i < ALPHA.length; i++)

{
ALPHA[i] = ALPHABET.charAt(i);
}

for (int j = 0; j < s.length(); j++)
{
char a = s.charAt(j);
if (Character.isLetter(a) || a==' ')
{
aCoder += a;
}
aCoder.length();

for(int i =0; i<aCoder.length(); i++)
{
char f = aCoder.charAt(i);
if (Character.isLetter(f))
{
int aide = ALPHABET.indexOf(aCoder.charAt(i));
if (aide < 21)
{char ajout = ALPHABET.charAt(aide + DECALAGE);
chaineCodee = chaineCodee + ajout;
}
else {
char ajout2 = ALPHABET.charAt(aide - 22);
chaineCodee = chaineCodee + ajout2;
}
}
else{
chaineCodee = chaineCodee + " ";
}
}
}

System.out.format("La chaine initiale etait : '%s'\n", s);

if (aCoder.isEmpty()) {
System.out.println("La chaine a coder est vide.\n");
} else {
System.out.format("La chaine a coder est : '%s'\n", aCoder);
System.out.format("La chaine codee est : '%s'\n", chaineCodee);
}
}
}

最佳答案

您的问题在于嵌套 for 循环的方式。

每次通过外循环时,您都会设置 aCoder 的下一个字符,然后迭代 aCoder 并对其进行整体编码,从而为您提供一种 '构建 chaineCodee 时的 December-days-of-christmas 输出。

当我使用你的程序编码“fnord”,而不是“jrsvh”时,我得到“jjrjrsjrsvjrsvh”(“j”+“jr”+“jrs”+“jrsv”+“jrsvh”)。

不要像这样嵌套循环:

    for (int j = 0; j < s.length(); j++) {
char a = s.charAt(j);
if (Character.isLetter(a) || a == ' ') {
aCoder += a;
}
for (int i = 0; i < aCoder.length(); i++) {
char f = aCoder.charAt(i);
if (Character.isLetter(f)) {
int aide = ALPHABET.indexOf(aCoder.charAt(i));
if (aide < 21) {
char ajout = ALPHABET.charAt(aide + DECALAGE);
chaineCodee = chaineCodee + ajout;
} else {
char ajout2 = ALPHABET.charAt(aide - 22);
chaineCodee = chaineCodee + ajout2;
}
} else {
chaineCodee = chaineCodee + " ";
}
}
}

只需将内部循环移到外面,并在构建完成后对源字符串进行编码:

    for (int j = 0; j < s.length(); j++) {
char a = s.charAt(j);
if (Character.isLetter(a) || a == ' ') {
aCoder += a;
}
}
for (int i = 0; i < aCoder.length(); i++) {
char f = aCoder.charAt(i);
if (Character.isLetter(f)) {
int aide = ALPHABET.indexOf(aCoder.charAt(i));
if (aide < 21) {
char ajout = ALPHABET.charAt(aide + DECALAGE);
chaineCodee = chaineCodee + ajout;
} else {
char ajout2 = ALPHABET.charAt(aide - 22);
chaineCodee = chaineCodee + ajout2;
}
} else {
chaineCodee = chaineCodee + " ";
}
}

关于java - "Crypting"Java练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26618845/

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