【发布时间】:2017-10-08 11:23:12
【问题描述】:
我的任务是创建一个图像数据库,其中包含多种类型的图像对象。每个图像都由一个二维像素阵列组成。我被要求创建这个方法: MatchPattern(Image subimage, Image image):这个函数返回一个整数,表示一个子图像在一个图像中重复了多少次。
我写的代码如下:
public int MatchPattern(Image subimage, Image image) {
if(image.getClass().equals(subimage.getClass())){
int numOfMatches = 0;
int imgWidth = image.getWidth();
int imgHeight = image.getHeight();
int subimgWidth = subimage.getWidth();
int subimgHeight = subimage.getHeight();
if (imgWidth < subimgWidth || imgHeight < subimgHeight)
return 0;
for (int i = 0; i < imgHeight; i++) {
for (int j = 0; j < imgWidth; j++) {
int subHeightIndex = 0;
int subWidthIndex = 0;
Pixel imagePix = image.getImg()[i][j];
Pixel subimgPix = subimage.getImg()[subHeightIndex][subWidthIndex];
if( (imagePix.compareTo(subimgPix)==0) && ((imgWidth-j)>=subimgWidth) && ((imgHeight-i)>=subimgHeight) ){
boolean matchFlag = true;
for (int k = 0; k < subimgHeight; k++) {
if(matchFlag == false)
break;
for (int l = 0; l < subimgWidth; l++) {
matchFlag = (image.getImg()[i+k][j+l] == subimage.getImg()[k][l]);
if (matchFlag == false)
break;
}
}
if(matchFlag == true)
numOfMatches++;
}
}
}
return numOfMatches;
}
return 0;
但是,每当我运行该方法时,它总是返回一个等于 0 的匹配数。有人能指出我正确的方向吗? 提前谢谢你。
【问题讨论】:
-
为什么不在
if语句中做一个简单的System.out.println看看控制是否进入内部?基本上,通过调试器并检查控制的去向,如果它没有去预期的地方,那么反映为什么会这样......?等等。最终,您将缩小问题范围并找出问题的原因。 -
学习使用调试器
-
Aominè,我试过这样做,但 System.out.println 都没有打印出来... RajithPemabandu,谢谢,我现在就去看看。 ScaryWombat,我对 Java 还比较陌生,因此我不知道调试器是如何工作的。
-
如果您使用 NetBeans 或 Eclipse 或其他 IDE,您将有一个可以使用的调试器。基本上,不是“运行”程序,而是“在调试模式下运行”,您可以通过单击要停止的行号来设置断点。调试器将运行您的程序并在您设置的断点处停止。您可以使用断点检查变量的值,并且可以一次将调试器单步执行一行,以查看程序的执行情况。这非常有用。