在Java中,是否有一种方法可以将元素的最后运行添加到for循环中的数组中?

时间:2018-10-12 05:02:39

标签: java arrays

我一直在寻找答案,但似乎找不到类似的问题。我花了过去的几个小时来尝试解决此问题,因此我需要指导。这是RLE字节数组的一种方法。

我似乎无法获取数组中元素的最后运行结果。即使有一个元素(例如15),它也会输出0 0而不是115。有人告诉我手动添加 for循环之后的最后一次运行。

是否可以在 for循环中添加最后一次运行?

输入:15 ​​15 15 4 4 4 4 4 4

输出:3 15 0 0

public static byte[] encodeRle(byte[] flatData)
{
    byte runLength = 1;
    byte indexTracker = 0;
    int runCount = countRuns(flatData);
    runCount *= 2;
    byte[] rleData = new byte[runCount];
    for(int i = 0; i < flatData.length - 1; i++)
    {
        if(flatData[i] != flatData[i+1] || runLength == 15)
        {
            rleData[indexTracker] = runLength;
            rleData[indexTracker + 1] = flatData[i];
            indexTracker += 2;
            runLength = 1;
        }
        else{
            runLength++;
        }
    }
    return rleData;
}

1 个答案:

答案 0 :(得分:0)

尝试添加如下所示的条件,以防您在输入数据的最后一次运行时循环中断。

public static byte[] encodeRle(byte[] flatData)
{
    byte runLength = 1;
    byte indexTracker = 0;
    int runCount = countRuns(flatData);
    runCount *= 2;
    byte[] rleData = new byte[runCount];
    for(int i = 0; i < flatData.length - 1; i++)
    {
        if(flatData[i] != flatData[i+1] || runLength == 15)
        {
            if(flagData[i+1] == flatData[flatData.length - 1]){
                rleData[indexTracker] = 0;
                rleData[indexTracker + 1] = 0;
                break;
            }

            rleData[indexTracker] = runLength;
            rleData[indexTracker + 1] = flatData[i];
            indexTracker += 2;
            runLength = 1;
        }
        else{
            runLength++;
        }
    }
    return rleData;
}

这会将0 0放入您的输出数组,并中断上次运行的循环。

希望这对您有帮助!