任意矩阵以二维数组输入,以矩阵形式输出
运行示例
输入:
[[3,7,8],[9,11,13],[15,16,17],[23,27,28]]
输出:
3 7 8
9 11 13
15 16 17
23 27 28
思路
用字符串参数对输入进行接受并处理,处理步骤如下:
(1)用substring()对字符串两头的中括号截掉
(2)用spilt()分别划分每行元素和每行元素中每个数字
(3)将数组由String转变为int方式储存
代码
import java.util.Scanner;
public class two_dimensional_scanner {
/*
*输入任意矩阵并输出
*输入例子 [[3,7,8],[9,11,13],[15,16,17]]
*/
public static void main(String[] args) {
int[][] nums = new int[100][100];
int i = 0,j = 0,k = 0;
Scanner scanner = new Scanner(System.in);
String I = scanner.nextLine(); //接受当前行输入的信息,并返回跳过的输入信息。即输入回车结束输入
String S = I.substring(I.indexOf("[[")+2, I.lastIndexOf("]]"));
/*
* 此步是截取掉字符串中开头和结尾的两个中括号
* substring(int beginIndex,int endIndex) 该函数是截取字符串指定位置间的子字符串
* 该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。
* indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
* lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。
* 注意:开头的中括号检索到的位置是第0位,我们要截去两个中括号,所以要加2。
*/
String[] trans = S.split("\\],\\[");
/*
* 此步是将字符串中每行元素分开
* split(String regex) 根据给定正则表达式的匹配拆分此字符串。
* 注意:因为用的是正则表达式,所以在使用特殊字符(如 * | [ ] 等)时要进行转义。即在“[”和“]”前加“//”。
*/
for (String str : trans) {
j = 0;
String[] snum = str.split(","); //此步是将每行元素中每个数字分开
for (String string : snum) {
nums[i][j++] = Integer.parseInt(string); //将以字符串储存的数字转换成int方式
}
i++;
//判断二维数组是否是矩阵
if (i == 1) {
k = j;
}else {
if (j != k) {
try {
throw new Exception("该数组不是矩阵,第"+i+"行元素个数异常");
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
}
//矩阵输出
for(int x = 0;x < i;x++){
for (int y = 0; y < j; y++) {
System.out.print(nums[x][y]+" ");
}
System.out.println();
}
scanner.close();
}
}