首页 > 解决方案 > 在 Java 中,有没有办法在 for 循环中将元素的最后一次运行添加到数组中?

问题描述

我已经搜索了这个问题的答案,但我似乎找不到类似的问题。在过去的几个小时里,我一直在试图解决这个问题,所以我正在寻求指导。它是一种 RLE 字节数组的方法。

我似乎无法输出数组中最后一次运行的元素。即使有一个元素(例如 15),它也会输出 0 0 而不是 1 15。有人告诉我在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;
}

标签: javaarrays

解决方案


尝试添加一个像下面这样的条件,以防您在最后一次运行输入数据时让您的循环中断。

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 放入您的输出数组,并将中断最后一次运行的循环。

希望对你有帮助!


推荐阅读