簡體   English   中英

從字符串中分離奇偶數

[英]Separate odd even from string

下面是問題:

從用戶獲取逗號分隔的數字字符串並打印奇數和偶數的集合。

樣本輸入:

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所以我不知道在這里做什么

您可以嘗試這個簡單的解決方案,而無需使用任何其他概念,例如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)

使用兩個ArrayListInteger表示奇數和偶數,並將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

希望這能解決你的問題

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

以下是一個功能更強大的解決方案,移動部件更少:

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 能夠了解代碼的描述性和簡單性。

帶有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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM