我正在根据文本文件中的字符编写一个简单的关卡创建器。它根本不是一个问题,但我想知道为什么我必须检查'1'的ASCII值而不是char'1'才能返回true,而char的早期使用工作正常。
以下是代码:
package com.side.side;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class LevelGenerator {
public LevelGenerator() throws IOException{
char[][] map = new char[4][4];
int i = 0;
int j = 0;
String thisLine;
BufferedReader reader = new BufferedReader(new FileReader("C:/Users/Downloads/Desktop/eclipse/level.txt"));
while((thisLine = reader.readLine()) != null){
while(i < thisLine.length()){
map[j][i] = thisLine.charAt(i);
i++;
}
if(i==thisLine.length()){
j+=1;
i = 0;
}
System.out.println(thisLine);
}
String maplis = Arrays.deepToString(map);
System.out.println(maplis);
for(int x = 0;x<=3;x++){
for(int y = 3;y>=0;y--){
if (map[y][x] == 1){System.out.println("true");}
else{System.out.println("false");}
}
}
}
}
答案 0 :(得分:1)
Java char
类型是一种二元性。它是一个整数类型,范围为0到65535.在字符串上下文中打印或使用时,数值将被视为字符的UTF-16代码。这个表达式:
if (map[y][x] == 1)
将字符代码编号与整数1进行比较。(字符1是一个模糊且过时的控制字符 - 在这种情况下不是您想要的。)使用character literal(单引号):
if (map[y][x] == '1')
..这将与实际的可打印/可输入字符“1”进行比较。或者从技术上来说,它仍在比较代码编号,但现在它正在使用正确的数字。以上内容与:
相同if (map[y][x] == 49)