在下面的方法中,我试图删除数组输入中小于0且大于9的值。我一直在做研究,我发现使用Arraylist.remove()
可能是最好的方法但我还不熟悉。所以我做的是尝试将整个数组复制到一个“垃圾”数组中,只放置小于0且大于9的值。但我的输出仍然是123145123145-110
?
public static void test (){
int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10};
int[] garbage = new int[input.length];
for (int i=0; i<input.length; i++){
if (input[i] < 0 && input[i] > 9){
garbage[i] = input[i];
}
int x = input[i];
System.out.print(x);
}
// EDIT
public static void votes(){
int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10,20};
int count = 0;
int[] garbage = new int[input.length];
for (int i=0; i<input.length; i++){
if (input[i]<0){
garbage[count] = input[i];
i++;
count++;
}
int x = input[i];
System.out.print(x);
}
}
答案 0 :(得分:0)
您使用的是错误的间隔。
if (input[i] < 0 && input[i] > 9)
应该是这个
if (input[i] < 0 || input[i] > 9)
你的垃圾应该是空的,但你的syso.println只是显示输入数组中的所有元素。另一个问题是,如果对两个数组使用相同的索引,则垃圾数组中的元素为0&lt; = input [i]&lt; = 9,并且它们之间会有很多零。总而言之,您的代码应该如下所示
int[] garbage = new int[input.length];
int j = 0;
for (int i=0; i < input.length; i++){
if (input[i] >= 0 && input[i] <= 9){
garbage[j] = input[i];
j++;
System.out.print(garbage[j]);
}
}
这样你就会看到添加到垃圾中的元素。并且所有零都在数组的末尾。
答案 1 :(得分:0)
您的输出打印出数组中的值,无论其值如何,因为它超出了if语句,尝试在print语句之后移动if语句的结束}
,如此
for (int i=0; i<input.length; i++){
if (input[i] < 0 && input[i] > 9){
garbage[i] = input[i];
//} <--- move this to
int x = input[i];
System.out.print(x);
} // <--- here
}
然而,garbage
数组中的值现在是您不想要的值(小于0且大于10),如果打印出那些你会找到预期输出的值。
如果你想要一个包含你想要的值的数组,那么创建一个数组并添加那个
int[] keeping = new int[input.length];
int j = 0;
for (int i=0; i<input.length; i++){
if (input[i] > 0 && input[i] <= 9){
keeping[j] = input[i];
j++;
int x = input[i];
System.out.print(x);
}
}
答案 2 :(得分:0)
向后走,所以当你删除某些东西时,你不会访问索引
for(int i = sizeOfArray - 1,i&gt; = 0; i--){ 如果array [i]&gt; 0删除对象; }
对不起sudo代码
答案 3 :(得分:0)
好的,因为在评论中你说你真正要做的是打印出&gt; 0和&lt; 9的元素,而不是实际更改数组,这变得非常简单。
public static void votes(){
int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10,20};
for (int i=0; i<input.length; i++){
if (input[i] >= 0 && input[i] <= 9){
System.out.print(input[i]);
}
}
}
就是这样!