有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中如何逆时针旋转此数组?

有个问题。请帮帮我

输入一个星束。(星=“*”) 假设你一个接一个地输入一堆星星。 逆时针旋转90度输出。 在第一行中,用空格分隔星束。存储星形捆绑包的数组必须用空格字符(“”)初始化。 从第二行开始,打印一个旋转星

enter image description here

import java.util.Scanner;

public class Spin {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
         int n = sc.nextInt();
         int[][] A = new int[n][n];
            
         int K = 1;
         for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
               A[i][j] = K++;
            }
         }
               
               
public static int[][] leftRotate(int n, int[][] A) {
            int[][] B = new int[n][n];

            for(int i=0; i<n; i++){
                for(int j=0; j<n; j++){
                    B[i][j] = A[j][n-i-1];
                }
            }

    }

}
}

共 (1) 个答案

  1. # 1 楼答案

    使用s = sc.nextLine()将输入作为字符串。例如,如果用户输入*** * **,则得到与s = "*** * **"相同的结果

    在空格上拆分行,得到String[] arr = {"***", "*", "**"}

    找到最长的字符串,例如,在本例中,您得到longest = 3

    数组的大小是生成的三维网格的宽度,最长的字符串是网格的高度,因此创建网格:char[][] grid = new char[longest][arr.length];

    用空格填充网格

    现在迭代arr并从底部开始构建网格的每一列

    ...   arr[0]   *..   arr[1]   *..   arr[2]   *..
    ...     ->  *..     ->  *..     ->  *.*
    ...            *..            **.            ***
    

    打印网格


    static void rotate(String input) {
        String[] words = input.split(" ");
        int rows = Arrays.stream(words).mapToInt(String::length).max().orElse(0);
        char[][] grid = new char[rows][words.length];
        Arrays.stream(grid).forEach(row -> Arrays.fill(row, ' '));
        for (int i = 0; i < words.length; i++)
            for (int j = 0; j < words[i].length(); j++)
                grid[rows - j - 1][i] = words[i].charAt(j);
        Arrays.stream(grid).forEach(System.out::println);
    }
    

    测试

    rotate("*** * **");
    rotate("** **** *");
    rotate("The quick brown fox jumps over the lazy dog");
    

    输出

    *  
    * *
    ***
    
     * 
     * 
    ** 
    ***
    
     kn s    
     cw pr y 
    eioxmeezg
    hurouvhao
    Tqbfjotld