我在两周前开始学习Java,所以请不要犹豫。 我正在用二维数组(图片)做这个程序,我想要旋转90度(已经完成,测试,它工作)和180.我的方法是无效的,我想使用90度一个在180度1中两次(组合?),但它不起作用。
这是我的90方法:
private boolean reserveSeat(int selectedRow, int selectedSeat) {
if (show.isSeatReserved(selectedRow, selectedSeat)) {
System.out.println("Sorry, that seat has already been booked");
return false;
} else {
show.reserveSeat(selectedRow, selectedSeat);
setRowNumber(selectedRow);
setSeatNumber(selectedSeat);
System.out.println("This seat has now been booked.");
return true;
}
}
有没有办法可以做到这一点?使用void函数?
提前致谢!
答案 0 :(得分:3)
方法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
}
答案 1 :(得分:2)
您只需要调用该方法两次。您可以做的是使用返回值rotate90()
来调用rotate90
,这是您建议的代码正在执行的操作,因为该方法不会获取参数或返回值。
答案 2 :(得分:2)
您的rotate90()
正在直接处理全局变量,因此您的rotate180()
也会如此。
public void rotate180(){
rotate90();
rotate90();
}
但是,我建议你使用一些参数并返回值,如果严格必要,只使用全局变量。另外,我不确定你的算法是否正确,我会这样做。
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
类或其他内容。
答案 3 :(得分:1)
如果您只想调用一次,可以将其作为参数传递
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),你需要返回矩阵而不是使虚函数为空。