Java 为什么赢了';我的数组是否满足此if语句的条件?

Java 为什么赢了';我的数组是否满足此if语句的条件?,java,arrays,Java,Arrays,我做这个程序是为了一个赋值,我完全不知道为什么我的数组(从一个单独的文件中读取值)不能满足这个if语句的条件。 为方便起见,所讨论的语句位于displaycolions类中 当我读取数组时,它会在指定的行和列中查找值,这是一个从1到9(包括1到9)注册的int值。当我使用print语句定期测试时,数组确实包含正确的值,但是if语句从未被激活。这些条件与数组的值匹配,但从不计算该语句、true或其他值 谢谢你的帮助 代码如下: DetectClonies2ElectricBoogaloo是客户端

我做这个程序是为了一个赋值,我完全不知道为什么我的数组(从一个单独的文件中读取值)不能满足这个if语句的条件。 为方便起见,所讨论的语句位于displaycolions类中

当我读取数组时,它会在指定的行和列中查找值,这是一个从1到9(包括1到9)注册的int值。当我使用print语句定期测试时,数组确实包含正确的值,但是if语句从未被激活。这些条件与数组的值匹配,但从不计算该语句、
true
或其他值

谢谢你的帮助

代码如下: DetectClonies2ElectricBoogaloo是客户端 滑梯是物体 slide.dat是文本文件,排列如下

6
8
10550000
00050000
00005500
01200000
01111000
00000030
公共类检测克隆2electricboogaloo{
公共静态void main(字符串[]args){
幻灯片培养=新幻灯片(“Slide.dat”);
culture.displayside();
文化;
}
}
import java.io.*;
公开课幻灯片{
private char NON_COLONY='0';
私有字符[][]滑动数据;
/**
*建造师
*pre:幻灯片文件包含以下格式的有效幻灯片数据:
*第一行:幻灯片长度
*第二行:幻灯片的宽度
*剩余行:幻灯片数据
*post:幻灯片数据已从幻灯片文件加载。
*/
公众幻灯片(字符串s){
试一试{
文件slideFile=新文件;
FileReader in=新的FileReader(slideFile);
BufferedReader readSlide=新的BufferedReader(in);
int length=Integer.parseInt(readSlide.readLine());
int width=Integer.parseInt(readSlide.readLine());
slideData=新字符[长度][宽度];
for(int row=0;row=滑动数据.长度)| |(列<0)| |(列>=滑动数据[0.长度)| |(滑动数据[行][列]!=颜色)){
返回(0);
}否则{
slideData[行][列]=非殖民地;
返回(1+
收集单元格(行+1,列,颜色)+
收集单元格(第1行,列,颜色)+
收集单元格(行、列+1、颜色)+
收集单元格(行,列-1,颜色)+
收集单元格(第1行,第1列,彩色)+
收集单元格(行+1,列+1,颜色)+
收集单元格(行-1,列+1,颜色)+
收集细胞(行+1,列-1,颜色);
}
}
/**
*分析菌落幻灯片并显示菌落数据
*pre:无
*post:已显示菌落数据。
*/
公营机构({
整数计数;
系统输出格式(“%-10s%-10s%-10s”,“位置”,“大小”,“颜色”);
System.out.println();
对于(int row=0;rowi
中的值)与字符(如“1”、“2”…)(在
slideData
中的值)进行比较,这些字符作为整数从0x30('0')开始

因此,在不重写程序的情况下,最简单的解决方案是通过将for循环值(1..9)转换为以下等效字符来修复不兼容的类型:

for (int i = 1; i <= 9; i++)
{
    char x = (char) (0x30 + i);
    if (slideData[row][col] == x)
    {
       // ...
    }
}

正如其他人也指出的那样,您正在将字符(char)与整数(int)进行比较。当您在单元格[0][0](行=0,列=0)看到数组中的值时,我可能会有点困惑包含1,
i
中的值也是1,但条件失败。但是
字符数组中存储的内容与整数变量的值之间存在差异

在Java中,当您将
字符
整数
进行比较时,JVM使用字符的ASCII值。它表示值1!=“1”,因为“1”的ASCII值是49

由于IDE的调试器如何显示字符数组的值,您可能看不到差异。例如,在IntelliJ中,您将看到: 它显示
slideData[0][0]
中的值为“1”(字符值),其ASCII(整数值)为49。 如果你对你的身体状况做一点小小的改变,你的身体状况就会起作用:

if (slideData[row][col] == 48 + i) {
   count = collectCells(row , col , (char)i);
   System.out.format("%-10s %-10s %-10s" , "(" + row + "," + col + ")" , count , i);
}

整数值48是“0”字符的ASCII值,将
i
的值加上它将给出您正在比较的字符的ASCII值。

请指定您的java版本,您使用的是什么JDK?这决定了java的哪些功能可用。此外,您可以使用其他工具还是仅使用纯java?您正在考虑以字符形式读入数据,并与整数进行比较,使字符“1”不等于1,依此类推。此外,请编辑您的帖子,并说明您希望收到的输出是什么?当您读入矩阵时,请对值进行parseInt或从i中减去“0”
if (slideData[row][col] == 48 + i) {
   count = collectCells(row , col , (char)i);
   System.out.format("%-10s %-10s %-10s" , "(" + row + "," + col + ")" , count , i);
}