2016-07-24 4 views
2

Die unten ist die Frage:Separate ungerade sogar von String

Komma getrennt String von Zahlen von Benutzern und druckt den Satz von ungeraden Zahlen und geraden Zahlen holen.

Abtastwerteingang:

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

Beispielausgabe:

Ungerade Zahlen:

1, 3,5,7,9

Auch Zahlen:

2,4,6,8,10

Probeneingang:

20,30,40

Beispielausgabe:

Auch Zahlen:

20,30,40

Mein Code:

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)); 
     } 
    } 

aber ich bekomme das Rig nicht ht Antwort. Welche ändert sollte ich den richtigen Ausgang nach der Frage

Ich weiß nicht wirklich Java sehr gut bekommen bringen, damit ich weiß nicht, was hier

+2

* "aber ich bekomme nicht die richtige Antwort" * Was für eine Antwort * bekommst du? – Andreas

+0

überprüfen Sie die Änderungen. – Kaushal28

Antwort

3

Sie tun können diese einfache Lösung versuchen, ohne andere Konzepte wie regex zu verwenden. Dazu können Sie die Zeichenfolge aufteilen und in einem String-Array speichern. Wenn Sie dann über ein Array iterieren, können Sie überprüfen, ob die Zahl ungerade oder gerade ist. Der folgende Code speichert alle geraden und ungeraden Zahlen aus Ihrer Zeichenfolge in dem Array even und odd.

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

Ausgang:

Auch Zahlen:
2,4,6,8,10

Ungerade Zahlen:
1,3,5,7,9

Vergessen Sie nicht, String in Integer zu konvertieren, wenn Sie die Bedingung überprüfen ition und Hinzufügen von Zahlen zu Arrays. Dafür habe ich Integer.parseInt(your_string) verwendet.

+0

das Problem in Ihrem Code ist, dass das Ausgabeformat ... es gibt keine Kommas in between, die Zahlenreihe sollte nächste Zeile nach "gerade Zahlen" oder "ungerade Zahlen" kommen, wenn die Reihe von Zahlen nur entweder gerade oder ungerade enthält dann sollte nur die ("entweder gerade oder ungerade") Ausgabe auf dem Bildschirm sein. –

+0

okay, Sie wollen Kommas? – Kaushal28

+0

überprüfen Sie die Änderungen @utkarshdubey – Kaushal28

0

Hoffnung dies Ihr Problem löst

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

Verwendung zwei ArrayList von Integer für Chancen und ausgleicht, und String s-String []s dann userInput.split(",") Zahlen zu trennen verwenden ändern.analysiere Strings in s zu Integer mit der Methode Integer.parseInt(str) und verwende dann if, um die Zahl zu bestimmen, die ungerade oder gerade ist, und füge sie Arraylisten hinzu.

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); 
     } 
    } 
} 


können Sie folgenden Code verwenden, erhalten Sie eine Ausgabe drucken:

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


Abtastwerteingang:

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

Beispielausgabe:

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

Es folgt eine weitere funktionelle Lösung mit weniger beweglichen Teilen:

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); 
} 

Ja, es ist ziemlich ineffizient, ich weiß. Es gibt wahrscheinlich einen besseren Weg, es zu tun, aber ich wollte nur, dass das OP einen Hinweis darauf bekommt, wie einfach und anschaulich ein Code sein kann.