转移阵列

时间:2015-03-05 16:24:55

标签: java arrays

我希望代码将少于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]);   
      }


   }}

4 个答案:

答案 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]);   
      }
    }
}