为了账号安全,请及时绑定邮箱和手机立即绑定

将代码行从 C++ 转换为 JAVA

将代码行从 C++ 转换为 JAVA

元芳怎么了 2022-01-19 15:46:39
我想出了下面的代码。设法解决了大多数错误,除了与地图相关的错误。我知道下面的代码行属于 C++。几天以来尝试了很多将其转换为JAVA,但无法找到方法:下面是 C++ 中的代码行map<Character,Integer> enc = new map<Character,Integer>();注意:将上述语法改为HashMap/Map并导入Java.Util后,以下代码中标有3星的代码行显示以下错误“表达式的类型必须是数组类型,但它解析为Map”1) enc[input.charAt(i)] = i; 2) int pos = enc[msg.charAt(i) - 32]; 3) int pos = enc[msg.charAt(i)];// 此函数将破译任何输入消息public static String ABC(String msg, String input)        {            // Hold the position of every character (A-Z) from encoded string             map<Character,Integer> enc = new map<Character,Integer>();            for (int i = 0; i < input.length(); i++)            {                ***enc[input.charAt(i)] = i;***            }            String decipher = "";            // This loop deciphered the message.             // Spaces, special characters and numbers remain same.             for (int i = 0; i < msg.length(); i++)            {                if (msg.charAt(i) >= 'a' && msg.charAt(i) <= 'z')                {                    ***int pos = enc[msg.charAt(i) - 32];***                    decipher += plaintext.charAt(pos);                }                else if (msg.charAt(i) >= 'A' && msg.charAt(i) <= 'Z')                {                    ***int pos = enc[msg.charAt(i)];***                    decipher += plaintext.charAt(pos);                }                else                {                    decipher += msg.charAt(i);                }            }            return decipher;        }
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

map<Character,Integer> enc = new map<Character,Integer>();

Map是 Java 中的一种接口类型,不能被实例化[作为匿名内部类以外的任何东西]。您需要实例化实现的类型之一Map,例如TreeMapor HashMap。


//Since Java 7, <> infers the type arguments

Map<Character, Integer> enc = new HashMap<>();

enc[input.charAt(i)] = i;

您使用的括号运算符语法 ( enc[input.charAt(i)]) 是 C++ 原生的,在 Java 中不可重载;因此,Java 中唯一允许使用此类括号的情况是在使用数组时。


您需要使用get()和put()配合 java 地图。


enc.put(input.charAt(i), i);

//...

int pos = enc.get(msg.charAt(i) - 32);


查看完整回答
反对 回复 2022-01-19
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

老问题,但供将来参考,这里是解决方案:


String plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

public static String ABC(String msg, String input)

    {

        // Hold the position of every character (A-Z) from encoded string

        Map<Character, Integer> enc = new HashMap<>();

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

        {

        des.put(input.charAt(i), i);

        } 


        String decipher = "";


        // This loop deciphered the message. 

        // Spaces, special characters and numbers remain same. 

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

        {

            if (msg.charAt(i) >= 'a' && msg.charAt(i) <= 'z')

            {

                int pos = enc.get((char)(msg.charAt(i)-32));

                decipher += plaintext.charAt(pos);

            }

            else if (msg.charAt(i) >= 'A' && msg.charAt(i) <= 'Z')

            {

                int pos = enc.get(mensaje.charAt(i));

                decipher += plaintext.charAt(pos);

            }

            else

            {

                decipher += msg.charAt(i);

            }

        }

        return decipher;

    }

基本上你必须put在映射时使用,然后get在使用时使用它。哦,从 char 中减去它。


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 725 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号