Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何将方形数组(二维)向右旋转90度?_Java_Arrays_Multidimensional Array_Indexoutofboundsexception - Fatal编程技术网

Java-如何将方形数组(二维)向右旋转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(

那么,它应该如何工作呢。我输入“n”和“m”来制作分辨率为n*m的二维矩阵。 我需要将其向右旋转90度,使其看起来像用油漆制作的图像:

我写了一些代码,但我不能真正使它工作-看起来很容易,但每次我试图让它工作,我得到了“超出边界的感觉”。这是:

 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这不是一个对其他人有用的答案,因为其他任何有类似问题的人都无法找到你的问题,因为没有好的搜索条件来找到它。因此,只需删除问题。哦,好的,不理解-无论如何,谢谢你的服务