得到了 method
这需要
two dimensional String array
作为参数, size
的 array
必须是 4x4
,下一个 method()
检查是否 size
不正确,
method() throw new MyArraySizeException(arr)
,之后 method()
必须对所有元素求和 array
,如果在 array
单元格不包含 digital
价值 method()
必须 throw MyArrayDataException
-使用去目标化,其中单元格包含不正确的值。
方法:
private static final int COLUMNS = 4;
private static final int ROWS = 4;
private static int convertString(String[][] arr){
int result = 0;
for (int i = 0; i < arr.length ; i++) {
for (int j = 0; j < arr[i].length ; j++) {
if (arr.length != 4 || arr[i].length != 4){
throw new MyArraySizeException(arr);
}
}
}
for (int i = 0; i < arr.length ; i++) {
for (int j = 0; j < arr[i].length ; j++) {
if (arr[i][j].matches("[0-9]+")) {
result += Integer.parseInt(arr[i][j]);
}else {
throw new MyArrayDataException(arr);
}
}
}
return result;
}
例外情况: MyArrayDataException(arr):
```
private String[][]arr;
public MyArrayDataException(String[][]arr){
this.arr = arr;
for (int i = 0; i < arr.length ; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j].matches("[a-zA-Z]+")){
System.out.println("Incorrect values in: " +"[" + i + "]" + "" + "[" + j + "] is " + arr[i][j]);
}
}
}
}
}
``` Method()
好好工作 exception
还有工作,问题是我不喜欢 sout
,我想改变认识 MyArrayDataException(arr)
. 我想用 super() constructor
,而不是 sout
. 把不直的细胞送入 super() constructor
,如何实现?
像这样:
我希望这个例外出现在另一个类中
//it's not work
private String[][]arr;
int test;
int test1;
public MyArrayDataException(String[][]arr){
super(String.format("Incorrect values in '%d'", arr[test][test1]));
this.arr = arr;
}
}
2条答案
按热度按时间yruzcnhs1#
是的,在异常构造函数中打印到sysout确实很愚蠢。你的直觉是对的。
想要得到你想要的东西最简单的方法就是做一个
static
方法将字符串数组转换为可打印的值:请注意,此方法或多或少已经存在:
Arrays.deepToString(arr)
我会的。然而,它打印了例如。[["Hello", "World"], ["Second", "Array"]]
,如果您想要一个多行对齐的矩阵富矿,您将不得不使用上述技巧。如果deeptostring适合你,那么你可以直接调用它,放弃自己编写arrtostring。ercv8c1e2#
你的一句话
MyArrayDataException
:在检测到数组内容不是有效正数的地方,您已经知道发生这种情况的索引。我会做的(
i
以及j
)异常构造函数的其他参数,因此无需重新扫描所有数组以搜索错误位置:顺便说一下,你重新扫描的逻辑是有缺陷的:一个元素是什么
"123"
? 这当然是违法的,但不匹配"[a-zA-Z]+"
. 支票最好是: