【发布时间】:2014-05-28 19:33:18
【问题描述】:
我正在尝试编写一个程序,该程序采用整数数组,扫描并删除任何重复值,然后将剩余值作为 ArrayList 返回。
就如何做而言,我觉得我走在正确的轨道上,但我似乎无法获得必要的嵌套 for 循环来参与。到目前为止,这是我的代码。
import java.util.ArrayList;
/**
*
* @author Justin
*/
public class ArrayOps4 {
/**
* @param args
* the command line arguments
*/
public static void main(String [] args) {
int [] cake = {2, 3, 4, 3, 2, 4, 5, 4, 6, 6, 6, 4, 3};
System.out.println(copyArray(cake));
// TODO code application logic here
}
/**
*
* @param anArray
* @return
*/
public static ArrayList copyArray(int [] anArray) {
// your work here
// declare the new ArrayList
ArrayList<Integer> nal = new ArrayList<>();
// loop through anArray, eliminating duplicates,
int [] Array2;
for (int i = 0 ; i < anArray.length ; i++) {
for (int j = 1 ; j < anArray.length ; j++)
if (anArray[j] == anArray[i]) {
for (int m = j ; m < anArray.length ; m++) {
anArray[m] = anArray[m++];
}
}
}
for (int ii = 0 ; ii < anArray.length ; ii++) {
nal.add(anArray[ii]);
}
// storing each unique element in the ArrayList
// your work here
// return new ArrayList
return nal;
// your work here
}
}
其他一切似乎都工作正常,但第二个 for 循环应该循环遍历数组中的所有整数并将它们与第一个 for 循环所持有的位置进行比较,但不会参与。当我在 Netbeans 中调试它时,第一个 for 循环的变量只会增加自身,然后移动到 ArrayList 创建循环,效果很好。
我将非常感谢任何关于我做错了什么的意见,或者如果这个程序甚至会做我认为一旦它开始工作就会做的事情。
在考虑到每个人的有用建议后,我离我更近了,但我仍然卡住了。我修改后的代码仍然有两个输入字符串的问题,我就是不知道为什么
package arrayops4;
import java.util.ArrayList;
/**
*
* @author Justin
*/
public class ArrayOps4 {
/**
* @param args
* the command line arguments
*/
public static void main(String [] args) {
int [] cake = {2, 3, 4, 3, 2, 4, 6, 8, 9, 6, 11};
System.out.println(copyArray(cake));
// TODO code application logic here
}
/**
*
* @param anArray
* @return
*/
public static ArrayList copyArray(int [] anArray) {
// your work here
// declare the new ArrayList
ArrayList<Integer> nal = new ArrayList<>();
// loop through anArray, eliminating duplicates,
int counter = 0;
int length = anArray.length;
for (int i = 0 ; i < anArray.length ; i++) {
for (int b = i + 1 ; b < anArray.length ; b++) {
if (anArray[i] == anArray[b]) {
for (int ii = b ; ii < anArray.length - 1 ; ii++) {
anArray[ii] = anArray[ii + 1];
}
counter++;
}
}
}
length = length - counter;
for (int k = 0 ; k < anArray.length - 1 ; k++) {
nal.add(anArray[k]);
}
return nal;
}
}
**仍然给我带来麻烦的输入是 [2, 14, 9, 15, 9, 7, 3, 17, 14] 和 [3, 5, 5, 5, 3, 3, 5, 3 , 5]。第一组返回 [2, 14, 9, 15, 7, 3] 并且缺少 17。第二组返回空括号。任何进一步的帮助将不胜感激。 提前致谢。 **
【问题讨论】:
-
你想在这里做什么:
anArray[m] = anArray[m++];? (a)你搞乱了for变量,m,m++,并且(b)它基本上只是增加 m,因为首先发生分配,然后增加。所以数组不能改变,m 计数为 2。你确定你不想要像anArray[m] = anArray[m + 1]这样的东西吗?
标签: java arrays loops nested duplicates