我希望代码将少于20的任何数字移到数组的末尾,只打印大于20的数字,但它不会保持打印 13和3虽然它不应该
这是输出:
遗体:22 13 3 26
代码:
public class Test {
public static void main (String[]args){
int[]cpoies = {22,12,13,4,3,2,26};
int numOfNumbers=cpoies.length;
for(int i=0;i<cpoies.length;i++){
if(cpoies[i] < 20 ){
for(int j=i;j<cpoies.length-1;j++)
cpoies[j]=cpoies[j+1];
--numOfNumbers;
}}
System.out.println("The remained : ");
for(int i=0;i<numOfNumbers;i++){
System.out.println(cpoies[i]);
}
}}
答案 0 :(得分:0)
如果您的号码小于20,请不要增加i。因为在你的代码中你将i + 1个元素移动到第i个位置。
if(cpoies[i] < 20 ){
for(int j=i;j<cpoies.length-1;j++)
cpoies[j]=cpoies[j+1];
--numOfNumbers;
i--;
}}
并且你的代码不会交换它只是使元素消失的元素。添加临时值以保持交换元素。
temp=cpoies[j];
cpoies[j]=cpoies[j+1];
cpoies[j+1]=temp;
答案 1 :(得分:0)
这不是交换。您将覆盖数组中的现有数据,而不是交换它。你需要一个交换变量。
for(int i=0;i<cpoies.length;i++){
if(cpoies[i] < 20 ){
for(int j=i;j<cpoies.length-1;j++)
cpoies[j]=cpoies[j+1];
--numOfNumbers;
}
}
这将打印20以下的数字,而不是结束。您正在打印数组中的所有起始数字而不是结尾:
for(int i=0;i<numOfNumbers;i++){
System.out.println(cpoies[i]);
}
答案 2 :(得分:0)
你可以试试这个,
public class Test {
public static void main (String[]args){
int[]cpoies = {22,12,13,4,3,2,26};
int numOfNumbers=cpoies.length;
for(int i=0;i<cpoies.length;i++){
if(cpoies[i] < 20 ){
int temp = cpoies[i];
for(int j=i+1;j<cpoies.length;j++) {
if(cpoies[j] > 20) {
cpoies[i] = cpoies[j];
cpoies[j] = temp;
numOfNumbers--;
}
}
}
}
System.out.println("The remained : ");
for(int i=0;i<=cpoies.length-numOfNumbers;i++){
System.out.println(cpoies[i]);
}
}}
答案 3 :(得分:0)
除了已经给出的所有答案之外,这里是将所有大数字转移到开头。由于我希望中断评论,效率更高一点
public class Test {
public static void main (String[]args){
int[]numbers = {22,12,13,4,3,2,26};
int numOfNumbers=numbers.length;
for(int i=0;i<numbers.length;i++){
if(numbers[i] > 20){
for(int j=i;j>0;j--)
if (numbers[j-1]>20){
break;
numOfNumbers=j;
}
tempnum=numbers[j];
numbers[j]=numbers[j-1];
numbers[j-1]=tempnum;
}}
System.out.println("The remained : ");
for(int i=0;i<=numOfNumbers;i++){
System.out.println(numbers[i]);
}
}
}