交换数组之间的元素 - java

时间:2015-10-13 09:50:59

标签: java arrays

我需要在数组之间交换元素。

Array1 = {1,3,-5,4,2,-8}
Array2 = {2,4,7,8,-9}
Array3 = {1,2,3,-4,6}

Array1必须只包含奇数值。 Array2有一些奇数值{7,-9},应与Array1中的偶数元素交换。 应该使用Array2中的奇数值,然后使用Array3。

public static int readInput(){
    int input = 0;
    // create Scanner object
    Scanner scanner = new Scanner(System.in);
    String option = scanner.nextLine();
    if (isNumber(option)) {
        input =  Integer.parseInt(option);
    } else {
        System.out.println("Oops Something went wrong!!");
        extractLargestAndSmallest();
    }
    return  input;
}

public static  void extractLargestAndSmallest(){
    try{
        int j = 0;
        int k = 0;
        System.out.println("How many arrays of int (treating these as array of arrays of int?) ");
        int numberOfArrays = readInput();


        System.out.println("Enter the Array size : ");          
        int number1 = readInput();  
        int numbers1[] = new int[number1];

        // prompt user 
        System.out.print("Enter the array element values: \n");
        // use for loop to obtain user input
        for (int counter = 0; counter < number1; counter++) {
            System.out.println("Enter the value for element at index " +counter);
            numbers1[counter] = readInput();
        }

        System.out.println("Building the Second array --");
        System.out.println("Enter the  Array size :");
        int number2 = readInput(); 
        int numbers2[] = new int[number2];


        System.out.print("Enter the array element values: \n");
        for (int counter = 0; counter < number2; counter++) {
            System.out.println("Enter the value for element at index " +counter);
            numbers2[counter] = readInput();
        }

        System.out.println("Building the Third array --");
        System.out.println("Enter the  Array size :");
        int number3 = readInput(); 
        int numbers3[] = new int[number3];


        System.out.print("Enter the array element values: \n");
        for (int counter = 0; counter < number3; counter++) {
            System.out.println("Enter the value for element at index " +counter);
            numbers3[counter] = readInput();
        }

        System.out.println("Confirming before working through with swapping --");
        System.out.println("There is/are"+ numberOfArrays +"array(s).");

        System.out.println("The current array of index #0 has"+ number1 +"element(s)." );
        for(int i = 0; i< numbers1.length;i++){
            if(numbers1[i]!=0){
                System.out.println(numbers1[i]);
            }
        }

        System.out.println("The current array of index #0 has"+ number2 +"element(s)." );
        for(int i = 0; i< numbers2.length;i++){
            if(numbers2[i]!=0){
                System.out.println(numbers2[i]);
            }
        }

        System.out.println("The current array of index #0 has"+ number3 +"element(s)." );
        for(int i = 0; i< numbers3.length;i++){
            if(numbers3[i]!=0){
                System.out.println(numbers3[i]);
            }
        }

        for (int i = 0; i < numbers1.length; i++) {
            if ((numbers1[i]) / 2 == 0) {
                int eventemp[] = new int[] {};
                eventemp[j] = numbers1[i];
                numbers1[i] = oddtemp[k];
                j++;
            }
        }

        for (int i = 0; i < numbers2.length; i++) {
            if ((numbers2[i]) / 2 != 0) {
                int oddtemp[] = new int[] {};
                oddtemp[k] = numbers2[i];
                k++;
            }
        }


    } catch(Exception e){
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

bvdb的答案很好,但它与OP的要求不符,因为它不使用数组。

也许不是最好的方法,但这是我首先想到的。这是针对上述问题的完整程序。

import java.util.*;
import static java.lang.System.out;
public class test{
    public static void main(String s[]){
        int array1[] = {1,3,-5,4,2,-8};
        int array2[] = {2,4,7,8,-9};
        int array3[] = {1,2,3,-4,6};
        int count = 0;
        boolean flag = false;
        for(int i=0;i<array1.length;i++){
            int temp;
            count++;
            if(array1[i]%2==0){
                for(int j=0;j<array2.length;j++){
                    if(array2[j]%2==1){
                        temp = array2[j];
                        array2[j] = array1[i];
                        array1[i] = temp;
                        break;
                    }
                }
            }
        }

            for(int i=0;i<array1.length;i++){
                int temp;
                if(array1[i]%2==0){
                    for(int j=0;j<array3.length;j++){
                        if(array3[j]%2==1){
                            temp = array3[j];
                            array3[j] = array1[i];
                            array1[i] = temp;
                            break;
                        }
                    }
                }
            }

        System.out.println("Array1");
        for(int i=0;i<array1.length;i++){
            System.out.println(array1[i]);
        }
        System.out.println("Array2");
        for(int i=0;i<array2.length;i++){
            System.out.println(array2[i]);
        }
        System.out.println("Array3");
        for(int i=0;i<array3.length;i++){
            System.out.println(array3[i]);
        }
    }
}

答案 1 :(得分:0)

问题是数组的大小是固定的。 您应该使用灵活的收藏(例如ArrayListHashSet)。

接下来只需遍历数组,并使用add类的ArrayList方法将它们添加到结果集中。

SPOILER警告:

  // 2 resulting collections
  Set<Integer> oddSet = new TreeSet<>();
  Set<Integer> evenSet = new TreeSet<>();

  // the source array
  int[] array = {1,2,3,4,5};

  // iterate the array
  int element;
  for (int j = 0, jLength = array.length; j < jLength; j++)
  {
    element = array[j];
    if (element%2 == 0)
    {
      // it's even, add it to the even set
      evenSet.add(Integer.valueOf(element));
    }
    else
    {
      // it's odd, add it to the odd set
      oddSet.add(Integer.valueOf(element));
    }
  }

  // show all odds
  for (Integer oddInteger : oddSet)
  {
    System.out.println("odd integer: " + oddInteger);
  }

  // show all evens
  for (Integer evenInteger : evenSet)
  {
    System.out.println("even integer: " + evenInteger);
  }

注释:树集排序很好,只包含唯一元素

如果这真的是你想要的(例如使用toArray方法),那么之后可以将这些集转换为数组