void方法中使用的void方法的组成? (Java)
Composition of void method used in void method? (Java)
我大约 2 周前开始学习 Java,所以请不要挑剔。
我正在用一个二维数组(一张图片)做这个程序,我想旋转 90 度(已经完成,测试,它有效)和 180。我的方法是无效的,我想使用 90 度在 180 度中两次(组合?),但它不起作用。
这是我的90后方法:
public void rotate90(){
for (int r = 0; r < w; r++) {
for (int c = 0; c < h; c++) {
imageMatrix[c][w-r-1] = imageMatrix[r][c];
}
}
public void rotate180(){
rotate90(rotate90()); // my idea was to rotate again the already rotated matrix, but since rotate90 is void it doesn't work
}
我有办法做到这一点吗?使用 void 函数?
提前致谢!
方法 rotate90()
没有参数。其实这不是正确的做法。
第一种方式写出来
rotate90();
rotate90();
或使用for-cycle
for (int i=0; i<2; i++) {
rotate90();
}
然而,这里有一种方法可以只用一种方法将它旋转多少次:
public void rotate90(int n) {
for (int i=0; i<n; i++) {
for (int r=0; r<w; r++) {
for (int c=0; c<h; c++) {
imageMatrix[c][w-r-1] = imageMatrix[r][c];
}
}
}
然后是rotate180()
方法:
public void rotate180(){
rotate90(2); // rotate by 90 two times
}
您只需调用该方法两次即可。您不能做的是使用 rotate90
的 return 值调用 rotate90()
,这是您建议的代码正在执行的操作,因为该方法不接受参数或 return一个值。
如果只想调用一次,可以作为参数传递
public void rotate90nTimes(int n){
for (int times = 0; times < n; times++) {
for (int r = 0; r < w; r++) {
for (int c = 0; c < h; c++) {
imageMatrix[c][w-r-1] = imageMatrix[r][c];
}
}
}
}
p.s.:
如果您确实想将其用作 rotate90(rotate90),则需要 return 矩阵而不是使函数无效。
您的 rotate90()
直接在全局变量上工作,因此您的 rotate180()
也会。
public void rotate180(){
rotate90();
rotate90();
}
但是,我建议您使用一些参数和 return 值,仅在绝对必要时才使用全局变量。另外,我不确定你的算法是否正确,我会这样做。
public static int[][] rotate90(int[][] matrix){
int [][] newMatrix = new int[matrix[0].length][matrix.lenght];
for (int r = 0; r < w; r++) {
for (int c = 0; c < h; c++) {
newMatrix[c][w-r-1] = matrix[r][c];
}
}
return newMatrix;
}
public static int[][] rotate180(){
return rotate90(rotate90());
}
不需要将它们设置为 static
,但由于它们不需要对象来工作,您可以将它们移动到 Utils
class 或其他东西。
我大约 2 周前开始学习 Java,所以请不要挑剔。 我正在用一个二维数组(一张图片)做这个程序,我想旋转 90 度(已经完成,测试,它有效)和 180。我的方法是无效的,我想使用 90 度在 180 度中两次(组合?),但它不起作用。
这是我的90后方法:
public void rotate90(){
for (int r = 0; r < w; r++) {
for (int c = 0; c < h; c++) {
imageMatrix[c][w-r-1] = imageMatrix[r][c];
}
}
public void rotate180(){
rotate90(rotate90()); // my idea was to rotate again the already rotated matrix, but since rotate90 is void it doesn't work
}
我有办法做到这一点吗?使用 void 函数?
提前致谢!
方法 rotate90()
没有参数。其实这不是正确的做法。
第一种方式写出来
rotate90();
rotate90();
或使用for-cycle
for (int i=0; i<2; i++) {
rotate90();
}
然而,这里有一种方法可以只用一种方法将它旋转多少次:
public void rotate90(int n) {
for (int i=0; i<n; i++) {
for (int r=0; r<w; r++) {
for (int c=0; c<h; c++) {
imageMatrix[c][w-r-1] = imageMatrix[r][c];
}
}
}
然后是rotate180()
方法:
public void rotate180(){
rotate90(2); // rotate by 90 two times
}
您只需调用该方法两次即可。您不能做的是使用 rotate90
的 return 值调用 rotate90()
,这是您建议的代码正在执行的操作,因为该方法不接受参数或 return一个值。
如果只想调用一次,可以作为参数传递
public void rotate90nTimes(int n){
for (int times = 0; times < n; times++) {
for (int r = 0; r < w; r++) {
for (int c = 0; c < h; c++) {
imageMatrix[c][w-r-1] = imageMatrix[r][c];
}
}
}
}
p.s.: 如果您确实想将其用作 rotate90(rotate90),则需要 return 矩阵而不是使函数无效。
您的 rotate90()
直接在全局变量上工作,因此您的 rotate180()
也会。
public void rotate180(){
rotate90();
rotate90();
}
但是,我建议您使用一些参数和 return 值,仅在绝对必要时才使用全局变量。另外,我不确定你的算法是否正确,我会这样做。
public static int[][] rotate90(int[][] matrix){
int [][] newMatrix = new int[matrix[0].length][matrix.lenght];
for (int r = 0; r < w; r++) {
for (int c = 0; c < h; c++) {
newMatrix[c][w-r-1] = matrix[r][c];
}
}
return newMatrix;
}
public static int[][] rotate180(){
return rotate90(rotate90());
}
不需要将它们设置为 static
,但由于它们不需要对象来工作,您可以将它们移动到 Utils
class 或其他东西。