throw exception-with detalization:哪个单元格包含错误的值

w6lpcovy  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(290)

得到了 method 这需要
two dimensional String array 作为参数, sizearray 必须是 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;
            }
        }
yruzcnhs

yruzcnhs1#

是的,在异常构造函数中打印到sysout确实很愚蠢。你的直觉是对的。
想要得到你想要的东西最简单的方法就是做一个 static 方法将字符串数组转换为可打印的值:

public MyArrayDataException(String[][] arr) {
    super(String.format("Incorrect values in '%s'", arrToString(arr));
    this.arr = arr;
}

private static String arrToString(String[][] arr) {
    // write code here
}

请注意,此方法或多或少已经存在: Arrays.deepToString(arr) 我会的。然而,它打印了例如。 [["Hello", "World"], ["Second", "Array"]] ,如果您想要一个多行对齐的矩阵富矿,您将不得不使用上述技巧。如果deeptostring适合你,那么你可以直接调用它,放弃自己编写arrtostring。

ercv8c1e

ercv8c1e2#

你的一句话 MyArrayDataException :
在检测到数组内容不是有效正数的地方,您已经知道发生这种情况的索引。我会做的( i 以及 j )异常构造函数的其他参数,因此无需重新扫描所有数组以搜索错误位置:

public MyArrayDataException(String[][]arr, int i, int j) {
        super(String.format("Incorrect value '%s' at [%d][%d]", 
                            arr[i][j], i, j));
        this.arr = arr;
    }

顺便说一下,你重新扫描的逻辑是有缺陷的:一个元素是什么 "123" ? 这当然是违法的,但不匹配 "[a-zA-Z]+" . 支票最好是:

if (! arr[i][j].matches("[0-9]+"))

相关问题