【问题标题】:Separate odd even from string从字符串中分离奇偶
【发布时间】:2016-11-27 16:40:08
【问题描述】:

下面是问题:

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

样本输入:

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不是很了解所以这里不知道怎么办

【问题讨论】:

  • “但我没有得到正确的答案”你得到什么答案

标签: java string loops


【解决方案1】:

您可以尝试这个简单的解决方案,而无需使用任何其他概念,例如 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)

【讨论】:

  • 你的代码中的问题是输出格式...中间没有逗号,数字系列应该在“偶数”或“奇数”之后的下一行,如果系列numbers 仅包含偶数或奇数,然后只有(“偶数或奇数”)输出应显示在屏幕上。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    希望这能解决您的问题

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

    【讨论】:

      【解决方案4】:

      以下是一种功能更强大、活动部件更少的解决方案:

      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 了解代码的描述性和简单性。

      【讨论】:

        【解决方案5】:

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

        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]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-05
          相关资源
          最近更新 更多