2011-12-18 21 views
0

我正在寫一個簡單的關卡創建者基於文本文件中的字符。這根本不是問題,但我想知道爲什麼爲了返回true而必須檢查'1'的ASCII值而不是char'1',而早期的char使用正常。程序同時使用char和ascii值,當我只希望它使用字符

下面是代碼:

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

請將您的代碼粘貼到此處,而不是在其他某個網站上。 http://stackoverflow.com/是這裏成爲高質量問題和答案的存儲庫;當你的代碼主機關閉他們的大門或過期時,會發生什麼?這將變得(更)無用,對未來的其他人沒有任何幫助。謝謝! – sarnold 2011-12-18 02:35:16

+0

請編輯你的問題,在這裏包含一些*簡單的*示例代碼來說明你在說什麼。 – 2011-12-18 02:35:18

回答

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) 
相關問題