如何检查2D数组中的所有行是否具有相同的大小

时间:2017-06-01 16:50:32

标签: java arrays

所以我有我喜欢的2D Char数组,里面有这样的东西:

WWWSWWWW\n
WWW_WWJW\n
W___WWWW\n
__WWWWWW\n
W______W\n
WWWWWWEW\n

我需要编写一个异常,当读取它时,它检查所有行是否具有相同的长度,如果不是,则返回自定义异常。

以下是我现在所拥有的一些内容

for (int i = 0; i < contalinhas; i++) {
        for (int j = 0; j < linelenght; j++) {
            System.out.print(linhaslidas[i].charAt(j));
            storelab[i][j] = linhaslidas[i].charAt(j);
            String linha = linhaslidas[i].get
            //builder.append(storelab[i][j]);
            //builder.toString();
            //System.out.print(builder);

            if (storelab[i][j] != ('S') && storelab[i][j] !=  ('W') && storelab[i][j] !=  ('_') && storelab[i][j] !=  ('E')) {
                throw new MazeFileWrongChar(i,j);

正如你所看到的,我已经有一个“If”作为另一个例外(基本上,限制允许的字符类型),所以我想做一些类似于通过数组的东西并计算每条线的长度。如果它检测到至少一个尺寸差异,则会发生异常。

问题是,我不知道如何编码,因为我使用的是数组而不是字符串(不同的方法)。

任何帮助?

2 个答案:

答案 0 :(得分:0)

您可以遍历数组的第一个索引并比较数组的大小:

int initialLen = storelab[0].length;

// Iterate from index 1, as we already got 0
for (int i = 1; i < contalinhas; i++) {
    int currLen = storelab[i].length;
    if (initialLen != currLen) {
        throw new SomeException();
    }
}

编辑:
如果你正在使用Java 8,你可以使用流来获得更优雅的解决方案,尽管效率较低:

long lenths = Arrays.stream(storelab).mapToInt(s -> s.length).distinct().count();
if (lengths != 1L) {
    throw new SomeException();
}

答案 1 :(得分:0)

您可以使用以下示例:

public class ExampleStrings {

    public static void main(String[] args) {
        String[] valid = {"aaa", "bbb", "ccc"};
        String[] invalid = {"aaa", "bbb", "1ccc"};

        // will pass with no exception
        allTheSameLength(valid);

        // will throw an exception with appropriate message
        allTheSameLength(invalid);
    }

    private static void allTheSameLength(String[] arr) {
        if (arr == null || arr.length == 0) {
            return; // or false - depends on your business logic
        }

        // get length of first element
        // it is safe to do because we have previously checked
        // length of the array
        int firstSize = arr[0].length();

        // we start iteration from 'second' element
        // because we used 'first' as initial
        for (int i = 1; i < arr.length; i++) {
            if (arr[i].length() != firstSize) {
                throw new IllegalArgumentException("String array elements have different sizes"); // or throw exception
            }
        }

    }

}

传递null或空参数是安全的。