【问题标题】:"Crypting" Exercise in JavaJava中的“加密”练习
【发布时间】:2014-10-28 21:30:47
【问题描述】:

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

提前致谢

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

    每次通过外部循环,您设置aCoder 的下一个字符,然后遍历aCoder 并对其进行完整编码,从而为您提供一种“圣诞节十二天”的输出你建立chaineCodee

    当我使用你的程序编码"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 + " ";
            }
        }
    

    【讨论】:

    • 哇,非常感谢!这是我在 StackOverFlow 上的第一篇文章,我刚刚开始编写代码,我必须告诉你我在这里被阻止了。你真的让我很开心!非常感谢!弗朗西斯·朗格洛斯
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 2012-10-11
    • 2017-06-16
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多