所以,基本上我有两个数组:
int[] listA = {2, -5, -121, 102, -35, -2, 0, -125, 802, -10};
int[] listB = {6, 99, -1, 12, 1, -2};
Run Code Online (Sandbox Code Playgroud)
我想填写一个新的数组(listD)所有listA缺少的元素listB.
输出应该是这样的:
输出:2,-5,-121,102,-35,0,-125,802,-10
我的代码如下:
int arraySize = 0; //Variable to determine size of the new array;
int difElements = 0; //Variable to count every different element;
for(int i = 0; i < listA.length; i++){
for(int j = 0; j < listB.length; j++){
if(listA[i] != listB[j]){
difElements++;
}
if(difElements == listB.length){
arraySize++;
}
}
difElements = 0;
}
System.out.println("Size of the array with different elements : " + arraySize);
int[] listD = new int [arraySize]; //Declaring array with specified size;
Run Code Online (Sandbox Code Playgroud)
然后我使用以下for循环来运行两个数组并检查是否有重复的元素:
for (int i = 0; i < listA.length; i++) {
for (int j = 0; j < listB.length; j++) {
if (listA[i] != listB[j]) {
listD[i] = listA[i];
} else {
listD[i] = listA[i + 1];
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道循环有什么问题,使用调试器很容易看出它出错的地方,但此时我只是在圈中运行并编码相同的错误...循环后找到重复的元素我不能找到一种规范化条件(listD[i] = listA[i])的方法,因为它跳过了一个位置.也许我需要另一个循环来迭代通过listD但我从来没有嵌套过三个循环...
请记住这是非常基本的java编程,这些只是我班级的练习,以获得java编程的基础知识.我不知道任何POO,课程,方法等等,当然也不能应用它们.
我建议您使用一个临时数组(例如listC)来存储我们需要复制的元素的位置。
第一次迭代两个数组时,您将计算新数组的大小,并在元素唯一时设置标志。
然后你迭代listC并复制其中的独特元素listA
int[] listA = {2, -5, -121, 102, -35, -2, 0, -125, 802, -10, 7, 555};
int[] listB = {6, 99, -1, 12, 1, -2, 7, 555};
// array of flags indicating which elements of listA to copy
int[] listC = new int[listA.length];
// counter of unique elements from listA
int counter = 0;
for (int i = 0; i < listA.length; i++) {
boolean contains = false;
//simplified form of for loop if you don't use an index
for (int b: listB) {
if (listA[i] == b) {
contains = true;
break;
}
}
if (!contains) {
counter++;
//setting listC[i] to 1 if listA[i] is not present in listB
listC[i] = 1;
}
}
// declaring array with specified size
int[] listD = new int[counter];
counter = 0;
// iterating through the array of flags to copy unique elements
for (int i = 0; i < listC.length; i++) {
if (listC[i] == 1) {
listD[counter++] = listA[i];
}
}
System.out.println(Arrays.toString(listD));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |