java - 从另一个数组创建一个数组?
问题描述
java新手,正在使用RLE编码,我正在尝试创建一个程序,该程序采用一个字节数组,然后返回另一个字节数组,但它采用数组中连续值的数量,然后打印[(重复次数) ,(价值)]。例如, [ 13,13,13,3,3,3,3 ] 将返回 [3,13,4,3]
import java.util.Arrays;
public class testing {
public static void main(String [] args) {
byte [] pracArray = {13,13,13,3,3,3,3};
int count = 1;
for (int i = 0; i <pracArray.length-1; i++)
{
if (pracArray[i] != pracArray[i+1])
{
count++;
}
}
byte numLength = 1;
byte indexNum = 0;
int newArraySize = count*2;
byte [] newArray = new byte [newArraySize];
for ( int i = 0; i < pracArray.length-1; i++)
{
if (pracArray[i] != pracArray[i+1] )
{
newArray[indexNum] = numLength;
newArray[indexNum+1] = pracArray[i];
indexNum = (byte) (indexNum + 2);
numLength = 1;
}
else
{
numLength++;
}
}
System.out.println(Arrays.toString((pracArray)));
System.out.println(Arrays.toString((newArray)));
}
}
我知道我的问题,最后一次连续数字没有被打印出来。如果我将数组更改为 [13,13,13,3,3,3,3,1],它将打印 [3,13,4,3,0,0],最后一个数字序列永远不会被记录,所以newArray 的最后两个值永远不会被填充。关于如何更改 if 语句以包含我的最后一个数字序列的任何想法?
解决方案
在循环终止时,检查最后一个元素是否等于倒数第二个元素。
您更新的代码将是:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
byte[] pracArray = { 13, 13, 13, 3, 3, 3, 3, 1 };
int count = 1;
for (int i = 0; i < pracArray.length - 1; i++) {
if (pracArray[i] != pracArray[i + 1]) {
count++;
}
}
byte numLength = 1;
byte indexNum = 0;
int newArraySize = count * 2;
byte[] newArray = new byte[newArraySize];
int i;
for (i = 0; i < pracArray.length - 1; i++) {
if (pracArray[i] != pracArray[i + 1]) {
newArray[indexNum] = numLength;
newArray[indexNum + 1] = pracArray[i];
indexNum = (byte) (indexNum + 2);
numLength = 1;
} else {
numLength++;
}
}
if (pracArray[i - 1] == pracArray[i]) {
newArray[indexNum] = numLength;
newArray[indexNum + 1] = pracArray[i];
indexNum = (byte) (indexNum + 2);
numLength = 1;
} else {
newArray[indexNum] = numLength;
newArray[indexNum + 1] = pracArray[i];
}
System.out.println(Arrays.toString((pracArray)));
System.out.println(Arrays.toString((newArray)));
}
}
输出:
[13, 13, 13, 3, 3, 3, 3, 1]
[3, 13, 4, 3, 1, 1]
的输出byte[] pracArray = { 13, 13, 13, 3, 3, 3, 3 }
如下:
[13, 13, 13, 3, 3, 3, 3]
[3, 13, 4, 3]
推荐阅读
- python - 将 Numpy 数组转换为 datetime.date pandas DataFrame
- visual-studio-code - 如何在另存为对话框中添加新的文件类型过滤器
- c - mac的多点触控代码
- scala - 将异常结果转换为迭代器
- swift - 可以创建从视图控制器的角落出现的 UITableView
- c - “使用带二进制位运算符的有符号整数操作数” - 使用无符号短时
- c# - 设置 ShowDialog 的 UIaccess 更改行为
- node.js - 可以在 package.json 的 devdependencies 中包含 npm 吗?
- google-bigquery - 如何从 BigQuery 的公共数据集中找到每个女性名字在 1910 年的最高出现率和相应状态
- regex - XQuery MarkLogic 中的模式或格式匹配