在0终止的输入循环上获得偶数和奇数整数

时间:2017-06-16 04:41:35

标签: java

我正在编写一个用户必须输入Integer值的程序, 如果用户输入0,它将继续接受输入并终止。 虽然效率不是这个练习的问题,但我的代码有很多循环和太多变量。 我还想删除最后一个逗号(,)

代码:

int[] even = new int[1000];
int[] odd = new int[1000];
int odd_ctr = 0;
int even_ctr = 0;
while(true){

    System.out.print("Enter number: ");
    int num = input.nextInt();
    if(num == 0) break;

    // even
    if(num % 2 == 0){
        even[even_ctr] = num;
        even_ctr++;
    }

    // odd
    else{
        odd[odd_ctr] = num;
        odd_ctr++;
    }

}


System.out.println("Even");
for(int i = 0; i < even_ctr; i++){
    System.out.print(even[i] + ",");
}

System.out.println("\nOdd");
for(int i = 0; i < odd_ctr; i++){
    System.out.print(odd[i] + ",");
}

预期产出:

Even
2,4,6,8
Odd
1,3,5,7,9

实际输出:

Even
2,4,6,8,
Odd
1,3,5,7,9,    

如果有人能让我的代码变得更简单和更短,我将不胜感激。

编辑:  我不允许使用ArrayList

3 个答案:

答案 0 :(得分:1)

您可以通过确保i != even_ctr-1

来避免每个输出循环上的尾随逗号
for(int i = 0; i < even_ctr; i++){
    String trail = ((i==even_ctr-1) ? "" : ",";
    System.out.print(even[i] + trail);
}

答案 1 :(得分:1)

以下是使用String的单循环解决方案。

String even = "";
String odd = "";

while(true){
    System.out.print("Enter number: ");
    int num = input.nextInt();
    if(num == 0) break;
    // even
    if(num % 2 == 0) even += num + " ";
    // odd
    else odd += num + " ";
}

System.out.println("Even\n" + even.trim().replace(" ", ","));
System.out.println("Odd\n" + odd.trim().replace(" ", ","));

答案 2 :(得分:1)

如果您希望它更短,请不要将您的号码存储在数组中。只需在运行中distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-rc-1-all.zip 即可构建结果。

String

如果只允许StringJoiner even = new StringJoiner(", "); StringJoiner odd = new StringJoiner(", "); for(int n = sc.nextInt(); n != 0; n = sc.nextInt()) { (n % 2 == 0 ? even : odd).add(Integer.toString(n)); } System.out.printf("Even: %s%nOdd: %s%n", even.toString(), odd.toString()); 和数组,我仍然只会使用String

String