java - 在 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;
}
解决方案
尝试添加一个像下面这样的条件,以防您在最后一次运行输入数据时让您的循环中断。
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 放入您的输出数组,并将中断最后一次运行的循环。
希望对你有帮助!
推荐阅读
- html - 如何水平空间引导表单
- amazon-web-services - docker-compose.yml 中的 AWS 参数存储
- c# - 如何通过使用带有 prestasharp 的工厂 GetByFilter 方法获取超过 5000 个实体
- reactjs - 关于redux saga的导入方法
- python - Web Scraping 没有给出预期的结果
- javascript - 按元素设置视图位置(javascript)
- python - 使用 python pandas 我们如何选择非常特定的行和关联的列
- ios - 在 PJSIP 中启用 G711a 和 G711u 编解码器
- c# - 无法在启动配置时从委托访问 DI 服务?
- javascript - 如何增加属性的值(整数)并在猫鼬中使用一些限制进行更新?