Java-如何将方形数组(二维)向右旋转90度?
那么,它应该如何工作呢。我输入“n”和“m”来制作分辨率为n*m的二维矩阵。 我需要将其向右旋转90度,使其看起来像用油漆制作的图像: 我写了一些代码,但我不能真正使它工作-看起来很容易,但每次我试图让它工作,我得到了“超出边界的感觉”。这是:Java-如何将方形数组(二维)向右旋转90度?,java,arrays,multidimensional-array,indexoutofboundsexception,Java,Arrays,Multidimensional Array,Indexoutofboundsexception,那么,它应该如何工作呢。我输入“n”和“m”来制作分辨率为n*m的二维矩阵。 我需要将其向右旋转90度,使其看起来像用油漆制作的图像: 我写了一些代码,但我不能真正使它工作-看起来很容易,但每次我试图让它工作,我得到了“超出边界的感觉”。这是: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s1 = new Scanner(
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s1 = new Scanner(System.in);
int n = s1.nextInt();
int m = s1.nextInt();
System.out.println();
int[][] array = new int[n][m];
int[][] ar = new int[n][m];
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[n - 1].length; j++) {
array[i][j] = s1.nextInt();
}
}
System.out.println("INPUT ARRAY :");
System.out.println();
for(int i = 0; i < array.length; i++) {
for (int j = 0; j < array[n - 1].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
/* here is the main actions with the array begin*/
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[n - 1].length; j++) {
ar[i][j]=array[n - j - 1][i];
}
}
/*the end of actions with the array*/
System.out.println("TASK ARRAY :");
System.out.println();
for(int i = 0; i < ar.length; i++) {
for (int j = 0; j < rr[n - 1].length; j++) {
System.out.print(ar[i][j] + " ");
}
System.out.println();
}
}
}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪s1=新的扫描仪(System.in);
int n=s1.nextInt();
int m=s1.nextInt();
System.out.println();
int[][]数组=新的int[n][m];
int[]ar=新的int[n][m];
for(int i=0;i
我到底做错了什么 双x1=点x-中心x; 双y1=点y-中心y 双x2=x1*数学cos(角度)-y1*数学sin(角度)); 双y2=x1*数学正弦(角度)+y1*数学余弦(角度)) 点x=x2+中心x; 点y=y2+中心y`
这应该转化为每一点,从那里开始应该足够简单。中心是长度/2这是程序的正确版本,所有for循环索引都已固定,并且打印移动到单独的方法
public class Main {
static void print(String title, int[][] array) {
System.out.println(title);
System.out.println();
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner s1 = new Scanner(System.in);
int m = s1.nextInt();
int n = s1.nextInt();
System.out.println();
int[][] array = new int[m][n];
int[][] ar = new int[n][m];
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
array[i][j] = s1.nextInt();
}
}
print("INPUT ARRAY :", array);
/* here is the main actions with the array begin*/
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
ar[j][m - i - 1] = array[i][j];
}
}
/*the end of actions with the array*/
print("TASK ARRAY :", ar);
}
}
公共类主{
静态无效打印(字符串标题,int[][]数组){
系统输出打印项次(标题);
System.out.println();
for(int i=0;i
Universal适用于任何其他角度。矩阵不能旋转2度,因此这是一个没有意义的点。只有90度、180度或270度。它是一个矩阵。这不是一个真正的几何问题。@Andreas它仍然有效,是的,你可以忽略一些值,或者将数组变大并重新居中。我还没有真正运行你的解决方案,但一个明显的问题是ar[I][j]=array[n-j][I];您正在替换数组项而不保留其引用。此外,索引“n-j”将导致“indexootfboundsexception”。n=4
,因此当j=0
时,array[n-j]
表达式表示array[4]
,这是超出范围的。您需要减去1:array[n-j-1]
复制/粘贴错误:第二个打印循环打印array
,而不是ar
@Andreas,这要感谢Andreas!写下“n=4,因此当j=0时,数组[n-j]表达式表示数组[4],这超出了边界。你需要减去1:array[n-j-1]”作为解决方案,这样我才能将你的答案标记为正确@snow4dv这不是一个对其他人有用的答案,因为其他任何有类似问题的人都无法找到你的问题,因为没有好的搜索条件来找到它。因此,只需删除问题。哦,好的,不理解-无论如何,谢谢你的服务