该项目是编码解码: ABCDEFGHIJKLMNOPQRSTUVWXYZ kngcadsxbvfhjtiumylzqropwe 首先,程序应该要求用户输入如上所述的键字符串。 然后程序将读取文件并将其编码内容输出到控制台。大写字母的映射方式与上面的小写字母相同,但保持大写。例如,使用上面的键,每个'A'变成'K' '编码文本时。数字和其他字符不编码并保持不变。 例如,通过上面的映射,每个'a'在编码文本时变为'k',并且每个 解码时'k'变为'a'。
运行1: 输入编码密钥:maxnrslkbpwfzjidouetchgvyq 输入文件名:sampleInput.txt **************编码内容**************** Grfxizr ti XE 20A! Xizdctrue mur liin mt siffigbjl bjetucxtbije,act jit mt urmnbjl yicu zbjn。 Bs yic mctizmtr m zree,yic lrt mj mctizmtrn zree。
再见!
我收到错误:Exception in thread "main" java.lang.NullPointerException
在char outputFile= hmap.get(FileChar);
行
C:\ Users ..... \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml:53:Java返回:1
我希望将输入文件分配给哈希映射获取值。
原因是因为我没有关于除了[a,z]之外的其他字符的关键值,如“,!”等等,那么它没有这个键值然后使其成为空的异常吗?
以下是code
的一些hashmap
:
HashMap<Character,Character>hmap = new HashMap<>();
for(int j =0; j<26; j++){
if(Character.isUpperCase(originalResult.charAt(j))){
hmap.put(originalResult.charAt(j),Character.toUpperCase(inputResult.charAt(j)));
}
else{
hmap.put(originalResult.charAt(j),inputResult.charAt(j));
}
}
以下是我认为问题的一些代码:
while((Fileline =bin.readLine())!=null )
{
char[] FileArray = Fileline.toCharArray();
for(int j=0;j<Fileline.length();j++ )
{
FileChar =FileArray[j];
char outputFile= hmap.get(FileChar); ////here is the problem
}
System.out.println( String.valueOf(outputFile));
}
我认为问题可能是我打印时的字符:
while((Fileline = bin.readLine())!= null){
char[] FileArray = Fileline.toCharArray();
for(int j=0;j<Fileline.length();j++ ){
FileChar =FileArray[j];
s = new String(String.valueOf(FileChar));
}
System.out.println(s);
ý
但是当我在循环中打印时,它看起来每行只有一个字母,而且有很多行:
while((Fileline = bin.readLine())!= null){
char[] FileArray = Fileline.toCharArray();
for(int j=0;j<Fileline.length();j++ ){
FileChar =FileArray[j];
s = new String(String.valueOf(FileChar));
System.out.println(s);
}
答案 0 :(得分:0)
没有输出(只有文件的最后一个字符)的原因是因为每次调用时都要重新实例化一个新字符串:
s = new String(String.valueOf(FileChar));
试试这个:
char[] FileArray = Fileline.toCharArray();
s = "";
for(int j=0;j<Fileline.length();j++ ){
FileChar =FileArray[j];
s = s + String.ValueOf(FileChar);
}
System.out.println(s);
同样的事情,但更清洁:
char[] FileArray = Fileline.toCharArray();
s = "";
for(int j=0;j<Fileline.length();j++ ){
s += String.ValueOf(FileArray[j]);
}
System.out.println(s);
最后:
while((Fileline =bin.readLine())!=null ){
char[] FileArray = Fileline.toCharArray();
s = "";
for(int j=0;j<Fileline.length();j++ ){
s += String.ValueOf(FileArray[j]);
}
System.out.println(s);
}
您获得空指针异常,因为hmap
没有为您要“获取”的每个字符都有值。如果你没有为密钥'a'设置一个值,你就不能指望得到密钥'a'的值;例如,如果我这样做:
hmap.put('a', 'd');
hmapt.get('z');
将重新引用空指针异常,因为键'z'的值不存在,仅适用于'a',即'd'。
如果你根本没有编译,那是因为你没有在你运行'.get(FileChar)'的范围内初始化一些变量'hmap'或'FileChar'。