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

时间:2018-11-13 20:39:30

标签: java c++

我想出了以下代码。设法解决了大多数错误,但与地图相关的错误除外。

我知道下面的代码行属于C ++。几天以来,尝试了很多将其转换为JAVA的方法,无法找到一种方法:

C ++下面的代码行

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

注意:在将以上语法更改为HashMap / Map并导入Java.Util之后,以下代码中标有3个星号的代码行显示以下错误“表达式的类型必须是数组类型,但已解析到地图”

  

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

1 个答案:

答案 0 :(得分:0)

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

Map是Java中的接口类型,不能实例化(除了匿名内部类以外的任何事物)。您需要实例化实现Map的类型之一,例如TreeMapHashMap

//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中只有在使用数组时才允许使用此类括号。

您需要在Java映射中使用get()put()

enc.put(input.charAt(i), i);
//...
int pos = enc.get(msg.charAt(i) - 32);