RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1401303
Accepted
Alex_Lynx
Alex_Lynx
Asked:2022-06-18 12:43:10 +0000 UTC2022-06-18 12:43:10 +0000 UTC 2022-06-18 12:43:10 +0000 UTC

为给定的 int 值重复一段代码。请帮我解决我的加密问题:)

  • 772

今天是个好日子!我正在解决一个问题,其本质如下:该方法被赋予一个字符串String text和一个数字int n。所有这些数据都以最终状态传输。有必要将文本中的所有偶数字符与奇数字符分开,并按照n中给出的次数执行此操作。如果 n=0 或 -n,则什么也不做。

例如,“这是一个测试!” 对于 n=1 ---> “hsi etTi 坐下!” , 并且对于 n=2 *"s eT ashi tist!"* 等等。容我们说,这种排列应该是 n 次。

经过一番头脑风暴,我想出了以下几点:

public static String encrypt(final String text, final int n){

        String result ="";

        int t = n;// временная переменная t для подсчета кол-ва проходов шифрования

        Character [] textArr = new Character[text.length()];
            for (int i = 0;i<text.length();i++){
                textArr[i] = text.charAt(i);
            }

        List<Character> charArr = Arrays.asList(textArr);

        List<Character> oddCharArr = new ArrayList<>();
        List<Character> evenCharArr = new ArrayList<>();

        List<Character> tempCharArr = new ArrayList<>(charArr);

 


            for (int i = 0; i < tempCharArr.size(); i++) {
                if (i % 2 == 0) {
                    evenCharArr.add(tempCharArr.get(i));
                } else oddCharArr.add(tempCharArr.get(i));
                tempCharArr.addAll(oddCharArr);
                tempCharArr.addAll(evenCharArr);
            }

这个想法是将字符串分成一个数组Char,然后遍历这个数组并将所有偶数和奇数字符分成两个额外的字符。大批。之后,将最终数组转换为字符串。就我而言,我是通过List来完成的。

这种改变似乎奏效了。数组被正确收集,但只收集一次。

试图用while来做,但没有成功。告诉我,我怎样才能更好、更有效地执行此操作n次?

紧接着的问题是赶上,在另一种方法中,有必要按原样返回所有内容。告诉我,或者至少提示算法如何做到这一点:)

先感谢您!

UPD(德米特里·阿列克申科):

public static String encrypt(final String text, final int n) {
    String result ="";

    int t = n;// временная переменная t для подсчета кол-ва проходов шифрования
    Character [] textArr = new Character[text.length()];
        for (int i = 0;i<text.length();i++){
            textArr[i] = text.charAt(i);
        }

    List<Character> charArr = Arrays.asList(textArr);
    List<Character> oddCharArr = new ArrayList<>();
    List<Character> evenCharArr = new ArrayList<>();

    List<Character> tempCharArr = new ArrayList<>();

        for (int i = 0; i < charArr.size(); i++) {
            if (i % 2 == 0) {
                evenCharArr.add(charArr.get(i));
            } else oddCharArr.add(charArr.get(i));
        }
    tempCharArr.addAll(oddCharArr);
    tempCharArr.addAll(evenCharArr);
    System.out.println(tempCharArr.toString());


    return result;
}

我希望得到帮助))上面我发布了有效的代码,但只有一次。

现在我们需要让它做这个排列给定的次数。这是我遇到问题的地方。我忍受了一个星期的头,然后陷入了无休止的循环)

你至少能提出实现这一点的最佳方法吗?总的来说很悲伤

java циклы
  • 2 2 个回答
  • 57 Views

2 个回答

  • Voted
  1. Best Answer
    Дмитрий Алексеенко
    2022-06-20T16:38:26Z2022-06-20T16:38:26Z

    我想你可以试试这样的

    public static void main(String[] args) {
    //        String result ="";
            String text = "This is a test!";
            int t = 2;// временная переменная t для подсчета кол-ва проходов шифрования
            while (t != 0) {
                List<String> blablaList = getBlaBlaList(text);
                text = blablaConvert(blablaList);
                t--;
            }
            System.out.println(text);
    
    
        }
    
        public static  List<String> getBlaBlaList(String text) {
            List<String> ret = new ArrayList<>();
            List<String> even = new ArrayList<>();
            List<String> odd = new ArrayList<>();
            for (int i = 0; i < text.length(); i++) {
                if (i % 2 == 0) {
                    even.add(text.substring(i, i + 1));
                    continue;
                }
                odd.add(text.substring(i, i + 1));
            }
            ret.addAll(even);
            ret.addAll(odd);
            return ret;
        }
    
        public static String blablaConvert(List<String> blablaList) {
            String ret = "";
            for (int i = 0; i < blablaList.size(); i++) {
                if (i % 2 == 0) {
                    ret += blablaList.get(i);
                    continue;
                }
                ret += blablaList.get(i);
            }
            return ret;
        }
    
    • 1
  2. MBo
    2022-06-20T17:35:48Z2022-06-20T17:35:48Z

    作为替代方案,我将提出这样一种方法——我们不是多次重新塑造字符串,而是计算每个字符n在转换后会落下的位置,并立即将其放在正确的位置。反向转换也可以做到这一点。

    我注意到对于每个字符串长度都有一个值p(这里是),字符串返回到它的初始状态,所以原则上对于大字符串n你可以进行n%p转换,但是哦,这p不是微不足道的。

    Python中的原理演示:

    def shuf(s, n):
        le = len(s)
        half = (le) // 2
        result = ['']*le  # список такой же длины, как строка
        for idx in range(0, le):
            t = idx
            for k in range(n):
                    t = (t + 1)%2 * half  + t // 2
            result[t] = s[idx]
        return ''.join(result)   #склейка символов из списка в строку
    
    for n in range(1,5):
        print(n, shuf("This is a test!", n))
    
    
    1 hsi  etTi sats!
    2 s eT ashi tist!
    3  Tah itse sits!
    4 This is a test!
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5