XazGreatXia 2024-07-08 20:49 采纳率: 29%
浏览 2

Java 符号乱码问题


package ChatExtends;

import java.util.ArrayList;

public class Encryted {
    
    private static String StartPass;

    private static String TranSit;

    private static String EndPass;

    public static void e1(String i) {

        StartPass = i;

        char[] c = i.toCharArray();

        ArrayList<String> end = new ArrayList<>();

        ArrayList<String> s = new ArrayList<>();

        for(int f = 0;f < c.length ; f++) {

            s.add(String.valueOf(c[f]));  

        }

        ArrayList<String> a = new ArrayList<>();

        for (int n = 0; n < 10; n++) {

            a.add(String.valueOf(n));

        }

        ArrayList<String> letter = new ArrayList<>();

        for(int x = 92;x <=122;x++) {

            letter.add(String.valueOf((char)x));

            letter.add(String.valueOf((char)x).toUpperCase());

        }

        for(int k = 0;k < c.length;k++) {

            if(Character.isLetter(c[k])) {

                int f = letter.indexOf(c[k]);

                if(f > 0) {

                    if(f-8 > 0) {

                        end.add(letter.get(f-8));

                    }

                } else if(f == 0) {

                    end.add(String.valueOf(f+1));

                }

            }
            else if(Character.isDigit(c[k])) {

                int b = a.indexOf(String.valueOf(c[k]));

                int j = 1;

                for(int v = 1;v <= b; ++v) {

                    j *= v;

                }

                if(j < 26) {

                    end.add(letter.get(j));

                } else {

                    end.add(String.valueOf(j));
                }

            }            

        }

        TranSit = end.toString();

        System.out.println(TranSit);

    }

}

为什么这段代码在i为任何值时,输出结果均为[, ], _, h]呢

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-07-08 20:49
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你好!看起来你的 Java 程序中确实存在一些问题,导致输出结果不是预期的加密字符串。我会帮你分析一下可能的原因。

    1. ArrayList 转字符串问题ArrayList 类型的对象直接使用 toString() 方法会输出其内部元素的内存地址,而不是元素的值。这就是为什么你看到的输出是 [\, ], _, h] 这样的格式。这是因为你的 end 列表中实际上只包含了一个元素,即字符 \

    2. 字符处理逻辑问题:你的代码中对字符的处理逻辑似乎有些混乱。特别是对于字母的处理,你的代码试图找到一个字符在 letter 列表中的位置,然后根据这个位置来决定如何处理它。但是,由于 letter 列表的构建方式,这个位置可能并不是你期望的。

    3. 字符索引问题:在处理字母时,你的代码使用了 letter.indexOf(c[k]) 来查找字符的位置。但是,由于 letter 列表中每个字符都重复了两次(一次小写,一次大写),这可能导致索引计算不正确。

    4. 数字处理逻辑问题:对于数字的处理,你计算了一个阶乘,然后尝试用这个阶乘的值作为 letter 列表的索引。但是,如果阶乘的值大于 25(因为 letter 列表只有 26 个元素),你的代码就会输出阶乘的数值,而不是列表中的字符。

    为了解决这些问题,你可以尝试以下步骤:

    • 确保 end 列表在添加元素时使用正确的逻辑。
    • 避免直接使用 ArrayListtoString() 方法来输出结果。你可以使用一个循环来构建一个字符串,然后将这个字符串输出。
    • 检查字符和数字的处理逻辑,确保它们按照你的预期工作。

    这里是一个简化的示例,展示如何正确地将 ArrayList 中的元素转换为字符串并输出:

    public static String listToString(ArrayList<String> list) {
        StringBuilder sb = new StringBuilder();
        for (String item : list) {
            sb.append(item);
        }
        return sb.toString();
    }
    
    // 在你的 e1 方法中使用这个函数来输出加密后的字符串
    System.out.println(listToString(end));
    

    希望这些信息能帮助你解决问题。如果你需要更详细的帮助,或者有其他编程问题,随时欢迎提问!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月8日

悬赏问题

  • ¥20 双硬盘安装Ubuntu后windows 无法挂载硬盘
  • ¥15 下面求极限的步骤哪里不对,正确答案是a1a2…an
  • ¥15 帮我利用jupyter 运行一个正确的代码
  • ¥15 如何使用Gephi软件和Python包中的GephiStreamer交互
  • ¥15 sqlite加密问题咨询
  • ¥15 appdesigner接收不到udp组播的数据
  • ¥15 verilog 非阻塞赋值下的移位拼接错误
  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理