无法从数组中获取正确的值
Unable to get correct values from array
所以当我设置一个数组并打印出值时,它们是正确的。但是当从我的 get array 方法打印出来时,它们是错误的。
public void setArrOfCols(BufferedImage bi){
for(int i = 0; i < this.arrOfCols.length; i++){
int value = bi.getRGB(i, 0);
int red = (value >> 16) & 0xff;
int green = (value >> 8) & 0xff;
int blue = value & 0xff;
int alpha = (value >> 24) & 0xff;
this.arrOfCols[i] = new Pixel(red, green, blue, alpha, i, 0);
}
String retStr = "";
for(int i = 0; i < this.arrOfCols.length; i++){
retStr += this.arrOfCols[i].getRed() + " "
+ this.arrOfCols[i].getGreen() + " "
+ this.arrOfCols[i].getBlue();
retStr += "\n";
}
System.out.println(retStr + " TestSet");
}
public Pixel[] getArrOfCols(){
String retStr = "";
for(int i = 0; i < this.arrOfCols.length; i++){
retStr += this.arrOfCols[i].getRed() + " "
+ this.arrOfCols[i].getGreen() + " "
+ this.arrOfCols[i].getBlue();
retStr += "\n";
}
System.out.println(retStr + " testGet");
return this.arrOfCols;
}
是否可能是引用传递问题?两个输出应该相同:
16 43 62
70 73 48
39 61 85
42 65 81
64 75 79
113 106 85
TestSet
103 148 190
103 148 190
103 148 190
103 148 190
103 148 190
103 148 190
testGet
您分享了两个 public 方法,这本身看起来不错。我无法重现与您相同的输出,但我会向您推荐两件事,这可能会为您解决问题。
- 将第一个方法重命名为
readImage
- 使第二种方法 return 成为数组的副本,其他方法可能会修改它,因此您会遇到一些奇怪的行为。
return Arrays.copyOf(this.arrOfCols, this.arrOfCols.length);
.getRed() 和其他颜色方法从不同的图像获取颜色
所以当我设置一个数组并打印出值时,它们是正确的。但是当从我的 get array 方法打印出来时,它们是错误的。
public void setArrOfCols(BufferedImage bi){
for(int i = 0; i < this.arrOfCols.length; i++){
int value = bi.getRGB(i, 0);
int red = (value >> 16) & 0xff;
int green = (value >> 8) & 0xff;
int blue = value & 0xff;
int alpha = (value >> 24) & 0xff;
this.arrOfCols[i] = new Pixel(red, green, blue, alpha, i, 0);
}
String retStr = "";
for(int i = 0; i < this.arrOfCols.length; i++){
retStr += this.arrOfCols[i].getRed() + " "
+ this.arrOfCols[i].getGreen() + " "
+ this.arrOfCols[i].getBlue();
retStr += "\n";
}
System.out.println(retStr + " TestSet");
}
public Pixel[] getArrOfCols(){
String retStr = "";
for(int i = 0; i < this.arrOfCols.length; i++){
retStr += this.arrOfCols[i].getRed() + " "
+ this.arrOfCols[i].getGreen() + " "
+ this.arrOfCols[i].getBlue();
retStr += "\n";
}
System.out.println(retStr + " testGet");
return this.arrOfCols;
}
是否可能是引用传递问题?两个输出应该相同:
16 43 62
70 73 48
39 61 85
42 65 81
64 75 79
113 106 85
TestSet
103 148 190
103 148 190
103 148 190
103 148 190
103 148 190
103 148 190
testGet
您分享了两个 public 方法,这本身看起来不错。我无法重现与您相同的输出,但我会向您推荐两件事,这可能会为您解决问题。
- 将第一个方法重命名为
readImage
- 使第二种方法 return 成为数组的副本,其他方法可能会修改它,因此您会遇到一些奇怪的行为。
return Arrays.copyOf(this.arrOfCols, this.arrOfCols.length);
.getRed() 和其他颜色方法从不同的图像获取颜色