程序使用char和ascii值,当我只想要它使用char时

时间:2011-12-18 02:33:47

标签: java

我正在根据文本文件中的字符编写一个简单的关卡创建器。它根本不是一个问题,但我想知道为什么我必须检查'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");}
            }
        }
    }
}

1 个答案:

答案 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)