2015-10-13 91 views
-1

我需要交換數組之間的元素。在數組之間交換元素 - java

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(); 
    } 
} 
+1

到目前爲止您嘗試了什麼? –

+0

發佈您爲此嘗試的代碼。 – Abubakkar

+5

我投票結束這個問題作爲題外話,因爲它就像一個家庭作業,OP沒有顯示任何編碼工作。 –

回答

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]); 
     } 
    } 
} 
+0

如果它是預定義的數組,則工作正常。但我正在動態獲取數組值。意味着數組的大小可能會有所不同.. –

+0

@pramodpatel是數組的數量是否固定? –

+0

雅是固定的。我得到我需要的輸出 –

0

問題是數組有一個固定的大小。 您應該使用靈活的集合代替(例如,ArrayListHashSet)。

接下來只需遍歷數組,然後使用ArrayList類的add方法將它們添加到結果集中。

擾流警告:

// 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); 
    } 

評論:一個TreeSet是很好的排序,並且只包含獨特的元素

這是可能的集合轉變爲事後陣列如果這就是你要真的是(例如用toArray方法)