我需要在数组之间交换元素。
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();
}
}
答案 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)
问题是数组的大小是固定的。
您应该使用灵活的收藏(例如ArrayList
或HashSet
)。
接下来只需遍历数组,并使用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
方法),那么之后可以将这些集转换为数组