描述我的问题我必须首先讨论我想要做的事情,http://i.imgur.com/rcHwze5.png这里是一张10 * 10网格的字母图像。对于网格中的每个框,如果1/3的像素被着色,则将1添加到ArrayList,否则添加0。这是我为此创建的3个方法:https://gist.github.com/VincentMc/7ddf3c282e80bbff7835 BoundBM是一个位图对象,其上绘有字母。
以下是我想要的输出http://i.imgur.com/B0QnUW8.png
的图像以下是我的实际输出http://i.imgur.com/WgRVXLv.png
的图像似乎一旦在行上添加1,它会不断添加,直到到达下一行,但我似乎无法理解为什么?
任何帮助都将非常感谢我已经有一段时间了,谢谢!
答案 0 :(得分:1)
分两步完成:
1:对每个字符串进行排序:
public String sortString(String s1){
char[] chars = s1.toCharArray();
Arrays.sort(chars);
String sorted = new String(chars);
return sorted;
}
2:将每个字符串放入数组中并使用:
Arrays.sort(stringArray);
答案 1 :(得分:0)
在你提供的Code-Segmet中,我看不出明显的错误。但你的设计是在招致错误。为避免这些,您可以尝试:
不要将count用作类范围变量,因为它与孔类无关,但仅与方法有关。所以把它作为一个返回语句,你不要放松对它的控制,它可以在任何地方设置或只在方法中本地更改。
不应在每个countPixel()方法调用中计算totalp,因为它是BoundBM的固定值。可能在构造函数中初始化它,或者加载位图。
最后,你知道你的输出数组应该有多大,对我来说,保持列表并添加它对我来说没有多大意义。创建一个2D数组,并直接编写它。
希望它会有所帮助 reineke
编辑:发现了错误! 在代码行27中你将x设置为0而不是输入x的初始值,所以你继续在错误的位置!!以下是我要做的事情:
final int GRID=10;
totalp = boundBM.getWidth()/GRID * boundBM.getHeight()/GRID;
//this method now does not need to read boundBM, so it is more opject-oriented
public int countPixels(int x, int y, int h, int w){
count = 0;
for (i=x; i<x+w; i++){
for(k =y; k<y+h; k++){
if(c != boundBM.getPixel(i, k)) count++;
}
}
//funny thing
return (count>totalp/3) ? 1 : 0;
}
public void createNeuralInput(){
int h = boundBM.getHeight()/GRID;
int w = boundBM.getWidth()/GRID;
int[][] array= new int[GRID][GRID];
for(int i = 0; i < GRID; i++) {
for(int j = 0; j < GRID ; j++) {
n1.add(countPixels(i*h, j*w, h, w));
//i would prefer:
//array[i][j]=countPixels(i*h, j*w);
}
}
}