将奇数与字符串分开

时间:2016-07-24 05:42:19

标签: java string loops

以下是问题:

从用户获取逗号分隔的数字字符串并打印奇数和偶数的集合。

示例输入:

1,2,3,4,5,6,7,8,9,10

示例输出:

奇数:

1,3,5,7,9

偶数:

2,4,6,8,10

示例输入:

20,30,40

示例输出:

偶数:

20,30,40

我的代码:

class OddEv{
public static void main(String args[]){
    String s;
    Scanner in=new Scanner(System.in);
    s=in.nextLine();
    for(int i=0;i<s.length();i++){
        if(s.charAt(i)%2==0){
            System.out.print(s.charAt(i));

        }

       if(s.charAt(i)%2!=0){
             System.out.print(s.charAt(i));
       }
    }

但我没有得到正确的答案。我应该根据问题

带来什么更改来获得正确的输出 实际上我不太了解java,所以我不知道该怎么做

5 个答案:

答案 0 :(得分:3)

您可以尝试这种简单的解决方案,而不使用任何其他概念,例如regex。为此,您可以拆分字符串并将其存储在字符串数组中,然后迭代数组,可以检查数字是奇数还是偶数。以下代码会将字符串中的所有偶数和奇数存储到名为evenodd的数组中。

String s = "1,2,3,4,5,6,7,8,9,10";

int even[] = new int[10];
int odd[] = new int[10];
String ar[] = s.split(",");
int j=0,k=0,oddChecker=0,evenChecker=0;
for(int i=0;i<ar.length;i++){
    if(Integer.parseInt(ar[i])%2 == 0){
        even[j] = Integer.parseInt(ar[i]);
                ++j;
        evenChecker = 1;

    }   
    else{
        odd[k] = Integer.parseInt(ar[i]);
        ++k;
    oddChecker = 1;
    }

}


if(oddChecker == 0){
    System.out.println("even");
    System.exit(0);
}

if(evenChecker == 0){
    System.out.println("odd");
    System.exit(0);
}



System.out.println("Even numbers:");

for(int i=0;i<j;i++){
if(i!=j-1){
        System.out.print(even[i]+",");
}
else{
    System.out.print(even[i]);
}
}
System.out.println();
System.out.println("Odd numbers:");

for(int i=0;i<k;i++){
if(i!=k-1){
        System.out.print(odd[i]+",");
}
else{
    System.out.print(odd[i]);
}
}
  

<强>输出:

     

偶数:
  2,4,6,8,10

     

奇数:
  1,3,5,7,9

在检查条件并向数组添加数字时,不要忘记将String转换为Integer。为此,我使用了Integer.parseInt(your_string)

答案 1 :(得分:2)

使用两个ArrayList Integer获得赔率和赔率,然后将String s更改为String []s,然后使用userInput.split(",")分隔数字。使用Integer.parseInt(str)方法将s中的字符串解析为整数,然后使用if语句确定number是奇数还是偶数,并将它们添加到arraylists中。

public static void main(String args[]) {
    String s[];
    Scanner in = new Scanner(System.in);
    s = in.nextLine().split(",");
    ArrayList<Integer> odds = new ArrayList<>();
    ArrayList<Integer> evens = new ArrayList<>();
    for (String item : s) {
        int number = Integer.parseInt(item);
        if (number % 2 == 0) {
            evens.add(number);
        } else {
            odds.add(number);
        }
    }
}

<小时/> 您可以使用以下代码在输出中打印结果:

System.out.println("Even Numbers:");
System.out.println(Arrays.toString(evens.toArray()).replaceAll("[\\p{Ps}\\p{Pe}]", ""));
System.out.println("Odd Numbers:");
System.out.println(Arrays.toString(odds.toArray()).replaceAll("[\\p{Ps}\\p{Pe}]", ""));

<小时/> 示例输入:

10,11,12,13,14,15,16,17,18,19,20

示例输出:

Even Numbers:
10, 12, 14, 16, 18, 20
Odd Numbers:
11, 13, 15, 17, 19

答案 2 :(得分:0)

希望这能解决您的问题

 public class CommaSeperatedNum {
        public static void main(String args[]){
        String s;
        Scanner in=new Scanner(System.in);
        s=in.nextLine();

    String numarray[] = s.split(",");
    int odd[] = new int[20];
    int oddcnt=0;
    int even[] = new int[20];
    int evencnt =0;

    for(int i=0;i<numarray.length;i++)
    {

        if( Integer.parseInt((numarray[i]).trim())%2 ==0){
           odd[oddcnt] = Integer.parseInt(numarray[i].trim());
           oddcnt++;
        }

        {
            even[evencnt] = Integer.parseInt(numarray[i].trim());
            evencnt++;
        }
    }

    System.out.print("Odd Numbers : " );
        for (int i = 0; i < odd.length && odd[i] != 0; i++) {
            System.out.print(odd[i]+" " );
        }

        System.out.println();
    System.out.print("Even Numbers : " );
        for (int i = 0; i < even.length && even[i] != 0; i++) {
            System.out.print(even[i]+" " );
        }
 }

答案 3 :(得分:0)

以下是功能更少的移动部件的更具功能性的解决方案:

public static void main(String args[]) {
    Scanner in = new Scanner(System.in);
    String[] split = in.nextLine().split(",");

    String evens = Arrays.stream(split)
            .filter(number -> Integer.parseInt(number) % 2 == 0)
            .collect(Collectors.joining(","));

    String odds = Arrays.stream(split)
            .filter(number -> Integer.parseInt(number) % 2 != 0)
            .collect(Collectors.joining(","));

    System.out.println("Even Numbers:\n" + evens);
    System.out.println("Odd Numbers:\n" + odds);
}

是的,我知道,效率很低。可能有更好的方法,但我只是想让OP得到一个代码的描述性和简单性的暗示。

答案 4 :(得分:0)

带有 partitioningBy 的 lambda 进行分离
字符串是偶数还是奇数只取决于最后一位数
不需要转换成数值

String inp = "1,2,3,4,5,6,7,8,9,10";
String[] nums = inp.split( "," );

Map<Boolean, List<String>> map = Arrays.stream( nums ).collect(
  partitioningBy(s -> "02468".indexOf(s.charAt(s.length() - 1)) >= 0));

System.err.println( "even: " + map.get( true ) );
System.err.println( "odd:  " + map.get( false ) );

even: [2, 4, 6, 8, 10]
odd: [1, 3, 5, 7, 9]