矩阵元素的旋转90度
不得不说,题目是简单,但自己却是硬生生的踩上了2个坑。记录下来了。好记性不如烂笔头,想哭难受。
拟解决的问题:
- 需自己处理输入输出。
- 矩阵元素的旋转。
我们利用Java中的Scanner类来解决输出输出,但自己去实现的时候程序运行的接口并不是像自己脑中思考的一样。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] strings = new String[n];
for (int i = 0; i < n; i++) {
String s = in.nextLine();
strings[i] = s;
}
}
爆出了错误:
1,2
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
原来有next()它不能读两个由空格分隔的单词。另外,在读取输入后将光标放在同一行中 。nextLine()在读取输入之后,将光标放在下一行。
正确的解决思路
在数组上,我又遇上了对二维数组没有定义第二维数组长度的错误。希望可以给自己一和你们一个提示吧,好好学习!
public class Main {
/*next()它不能读两个由空格分隔的单词。另外,在读取输入后将光标放在同一行中 。
nextLine()在读取输入之后,将光标放在下一行。*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] strings = new String[n];
for (int i = 0; i < n; i++) {
String s = in.next();
strings[i] = s;
}
int[][] nums = rotate(strings);
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[0].length; j++) {
if(i == nums.length-1 && j == nums[0].length-1){
System.out.print(nums[i][j]);
} else {
System.out.print(nums[i][j] + ",");
}
}
}
}
public static int[][] rotate(String[] s) {
int len = s.length;
String[] tmp1 = s[0].split(",");
int col = tmp1.length;
int[][] nums = new int[len][col];
for (int i = 0; i < len; i++) {
String[] tmp = s[i].split(",");
for (int j = 0; j < tmp.length; j++) {
nums[i][j] = Integer.parseInt(tmp[j]);
}
}
int m = nums.length;
int n = nums[0].length;
for (int i = 0; i < m; i++) {
for (int j = i; j < n; j++) {
int tmp = nums[i][j];
nums[i][j] = nums[j][i];
nums[j][i] = tmp;
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n/2; j++) {
int temp = nums[i][j];
nums[i][j] = nums[i][n-1-j];
nums[i][n-j-1] = temp;
}
}
return nums;
}
}