【问题标题】:to display the even number followed by all odd numbers显示偶数后跟所有奇数
【发布时间】:2019-03-19 08:06:34
【问题描述】:

下面写的代码是正确的,但我想缩短这段代码。

用java编写一个程序,在一维数组中输入10个数字,并将它们排列成所有偶数后面都是奇数。

int a[] = new int[6];
int b[] = new int[6];
int i, j;
int k = 0;
System.out.println("enter array");
for (i = 0; i < 6; i++) {  
    a[i] = sc.nextInt();
}
for (j = 0; j < 6; j++) {
    if (a[j] % 2 == 0) {
        b[k] = a[j];
        k++;
    }
}
for (j = 0; j < 6; j++) {
    if (a[j] % 2 != 0) {
        b[k] = a[j];
        k++;
    }
}
System.out.println("out-put");
for (i = 0; i < 6; i++) {  
    System.out.println(b[i]);
}

我可以将偶数和奇数排列在一个 for 循环中而不是两个 for 循环中吗?我正在使用两个 for 循环将偶数和奇数传输到 b[] 数组中。请缩短代码。一个 for 循环遍历用于检查偶数,第二个用于检查奇数。

【问题讨论】:

  • 您是否尝试过使用来自 java 8 的流?您可以按规则对项目进行分组,在这种情况下,如果数字可以被 2 整除
  • @ClaudiuGuja GujaI 我对 Java 流一无所知。
  • 是没有。已知的偶数和奇数。
  • 看看下面我的回答。 @ManjeetSingh 最好的方法是使用 Comparator。
  • 我在下面留下了一个使用流的代码示例。您会注意到数字列表的实际处理要简单得多。我确信还有一种方法可以在 MAP> 中收集列表,布尔值表示数字是奇数还是偶数

标签: java


【解决方案1】:

这是一个简单的程序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Momir Sarac
 */
public class GroupByEvenAndOddNumbers {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // create a collection
        List<Integer> listOfNumbers = new ArrayList<>();
        // do code within a loop for 10 times
        for(int i=0;i<10;i++)
        {
            //print to screen this text
            System.out.println("Input your number:");
            //get next input integer
            int number = scanner.nextInt();
            // add it to collection
            listOfNumbers.add(number);
        }
        // sort this collection, list of numbers
        // convert all numbers(positive and negative ) within to 0 or 1 depending whether or not they are even or odd and sort them accordignaly.
        Collections.sort(listOfNumbers, Comparator.comparingInt(n -> Math.floorMod(n, 2)));
        //print sorted collection
        System.out.println("Ordered list ..." + listOfNumbers);
    }
}

【讨论】:

    【解决方案2】:

    在这个版本中,它会将偶数复制到开头,将奇数复制到结尾。

    static int[] sortEvenOdd(int... nums) {
        int even = 0, odd = nums.length, ret[] = new int[nums.length];
        for (int num : nums)
            if (num % 2 == 0)
                ret[even++] = num;
            else
                ret[--odd] = num;
        return ret;
    }
    
    public static void main(String[] args) {
        int[] arr = {1, 3, 2, 4, 7, 6, 9, 10};
        int[] sorted = sortEvenOdd(arr);
        System.out.println(Arrays.toString(sorted));
    }
    

    打印

    [2, 4, 6, 10, 9, 7, 3, 1]
    

    【讨论】:

      【解决方案3】:

      本准则将帮助您区分偶数和奇数。

      // java code to segregate even odd 
      // numbers in an array 
      public class GFG { 
      
      // Function to segregate even 
      // odd numbers 
      static void arrayEvenAndOdd( 
                  int arr[], int n) 
      { 
      
          int i = -1, j = 0; 
          while (j != n) { 
              if (arr[j] % 2 == 0) 
              { 
                  i++; 
      
                  // Swapping even and 
                  // odd numbers 
                  int temp = arr[i]; 
                  arr[i] = arr[j]; 
                  arr[j] = temp; 
              } 
              j++; 
          } 
      
          // Printing segregated array 
          for (int k = 0; k < n; k++) 
              System.out.print(arr[k] + " "); 
      } 
      
      // Driver code 
      public static void main(String args[]) 
      { 
          int arr[] = { 1, 3, 2, 4, 7, 
                              6, 9, 10 }; 
          int n = arr.length; 
          arrayEvenAndOdd(arr, n); 
       } 
      } 
      

      【讨论】:

      • 你的代码是正确的。但是要理解你的代码有点困难。
      【解决方案4】:

      由于您没有任何要求偶数和奇数本身必须在各自的数组的一半中排序,您可以在输入它们时将它们分配给它们相关的数组部分。 因此,您只需要使用两个“计数器”变量,一个用于左侧,从零开始并递增,另一个用于右侧,从您的数组长度减一开始并递减。然后你可以添加你的数字,检查一个是否是偶数,分配它,你的左计数器柱增加,如果一个是奇数,分配它你的右计数器柱递减。在一个循环中执行此操作,直到您的左侧计数器大于右侧计数器。 我创建了一个简单的示例,在将字符串解析为 int 时没有检查 NumberFormatException

      import java.util.Arrays;
      import java.util.Scanner;
      
      public class SortedArrayInput {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
      
              System.out.print("Enter length of array: ");
              final int arrayLength = Integer.parseInt(scanner.nextLine());
      
              int intArray[] = new int[arrayLength];
              for (int l = 0, r = arrayLength - 1; l <= r; ) {
                  System.out.print("Enter new array value: ");
                  int v = Integer.parseInt(scanner.nextLine());
                  intArray[v % 2 == 0 ? l++ : r--] = v;
              }
      
              System.out.println("Output: " + Arrays.toString(intArray));
          }
      }
      

      示例输入/输出:

      Enter length of array: 6
      Enter new array value: 1
      Enter new array value: 2
      Enter new array value: 3
      Enter new array value: 4
      Enter new array value: 5
      Enter new array value: 6
      Output: [2, 4, 6, 5, 3, 1]
      

      【讨论】:

        【解决方案5】:

        我建议阅读有关流的内容,它们会让您更轻松地处理集合

        List<Integer> numbers = new ArrayList<>();
                numbers.add(1);
                numbers.add(2);
                numbers.add(3);
                numbers.add(4);
                numbers.add(5);
                numbers.add(6);
                numbers.add(7);
                numbers.add(8);
                numbers.add(9);
                numbers.add(0);
        
                //this way you simply traverse the numbers twice and output the needed ones
                System.out.println(numbers.stream()
                        .filter(x->x%2==0)
                        .collect(Collectors.toList()));
                System.out.println(numbers.stream()
                        .filter(x->x%2==1)
                        .collect(Collectors.toList()));
        
                //this way you can have the numbers in two collections
                numbers.forEach(x-> x%2==0? addItToEvenCollection : addItToOddCollection);
        
                //this way you will have a map at the end. The boolean will tell you if the numbers are odd or even, 
                // and the list contains the numbers, in order of apparition in the initial list
                numbers.stream().collect(Collectors.groupingBy(x->x%2==0));
        

        【讨论】:

          【解决方案6】:

          检查数字是否为偶数的一种有效方法是使用 if ( (x & 1) == 0 )

          【讨论】:

            猜你喜欢
            • 2018-01-09
            • 1970-01-01
            • 2012-06-18
            • 1970-01-01
            • 1970-01-01
            • 2022-10-14
            • 1970-01-01
            • 2020-03-22
            • 1970-01-01
            相关资源
            最近更新 更多