PTA【福到了】Java

福到了

“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。

输入格式:

输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。

输出格式:

输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。

输入样例 1:
$ 9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@
输出样例 1:
$$$$$  $ 
$ $ $  $ 
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
 $$$  $$$
 $ $   $ 
 $$$  $$$
$$$$$  $ 
输入样例 2:
& 3
@@@
 @ 
@@@
输出样例 2:
bu yong dao le
&&&
 & 
&&&

代码

import java.io.*;

public class Main {
    
    
	public static void main(String[] args) throws IOException {
    
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] arr = br.readLine().split(" ");
		char s = arr[0].charAt(0);
		int n = Integer.parseInt(arr[1]);
		String str;	//每行输入的字符串
		StringBuilder[] sb = new StringBuilder[n]; //反转后的字符串数组
		for(int i = 0; i < n; ++i) {
    
    
			str = br.readLine();
			char c = 0;
			for(int j = 0; j < str.length(); ++j) {
    
    
				if(str.charAt(j) != ' ') {
    
    
					c = str.charAt(j);
					break;
				}
			}
			str = str.replace(c, s); //将旧字符用新字符替换掉
			sb[i] = new StringBuilder(str).reverse(); //字符串反转
		}
		boolean flag = false;
		for(int i = 0; i < n / 2; ++i) {
    
     //判断是否上下对称
			if(!sb[i].toString().equals(sb[n - i -1].toString())) {
    
    
				flag = true;
				break;
			}
		}
		if(!flag) {
    
    
			System.out.println("bu yong dao le");
		}
		for(int i = n - 1; i >= 0; --i) {
    
    
			System.out.println(sb[i]);
		}
	}
}

【注】
①使用replace()函数是返回一个替换后的字符串,而字符串本身并未改变。因此需要将返回值赋予自身变量,例如str = str.replace(oldChar,newChar)。
②字符串反转函数reverse(),String类型字符串无法使用,因此需要定义StringBuilder类型字符串。
③StringBuilder型字符串无法直接使用equals()比较两个字符串是否相等,因为StringBuilder类的equals()没有重写,内部依然使用了==的比较方法,所以即使两个相等的字符串比较也为false。因此需要将两个StringBuilder类型字符串用toString()转换为String类型后再用equals()进行比较。

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_50816725/article/details/109106420