2017-09-10 1 views
1

Ich denke, ich bin in der Nähe, aber ich bin derzeit stecken. im Grunde, was ich tun muss, ist für drei Saiten stellen und die geringere Anzahl von Klein und die höchste Zahl des unteren Gehäuses von dem EingangsSuche die höchste und niedrigste Anzahl von Kleinbuchstaben

import java.util.*; 

public class Practice_program1 { 

    public static void main(String[] args) { 
     @SuppressWarnings("resource") 
     Scanner input = new Scanner(System.in); 
     int x = 0; 
     int y = 0; 
     int z = 0; 
     String user; 
     String a = input.nextLine(); 
     String b = input.nextLine(); 
     String c = input.nextLine(); 

     for (int i = 0; i < 3; i++) { 
      System.out.print("Enter a String: "); 
      user = input.nextLine(); 

      if (Character.isLowerCase(a.charAt(i))) 
       x++; 
      else if (Character.isLowerCase(b.charAt(i))) 
       y++; 
      else if (Character.isLowerCase(c.charAt(i))) 
       z++; 

      { 
       if (x > y && x > z) 
        ; 
       System.out.print(user + " has the highest number of lowercase letters" + a); 
       if (y > z && y < x) 
        ; 
       System.out.print(user + " has the lowerst number of lowercase letters" + b); 

      } 

     } 

    } 
} 
+1

entfernen ';' nach 'if' –

+0

* niedrigere Zahl von Kleinbuchstaben und die höchste Zahl von Kleinbuchstaben * nicht sicher, was Sie fragen? Könnten Sie auch Beispieleingabe und -ausgabe veröffentlichen? – Ravi

+0

Ahh, das wäre nützlich, wenn ich die Frage gepostet hätte. Es gibt mir keine Ausgabe, die das Problem ist, –

Antwort

1

Nun, es gibt ein paar Dinge, die ich vor darauf hinweisen, die Bereitstellung die Lösung.

  1. Ich habe nicht die Verwendung der Zeichenfolge Variable "Benutzer" verstanden. Daher habe ich es übersprungen. Wenn Sie seine Verwendung erklären können, kann ich den Code bei Bedarf entsprechend bearbeiten.
  2. Der Zustand von zwei Strings mit der gleichen Anzahl von Kleinbuchstaben wird nicht berücksichtigt.
  3. Die andere Sache ist, dass Sie versuchen, die Anzahl der Kleinbuchstaben mit der Iterationsvariablen i zu zählen, aber was ist, wenn die Strings drei verschiedene Längen haben? Ich vergleiche ihre Zählung, um die Zeichenfolge mit den maximalen Kleinbuchstaben und der Mindest zu finden

Deshalb dachte ich, es wäre besser, eine separate Methode schreiben die Anzahl der Kleinbuchstaben in jeder Kette zu zählen und dann Kleinbuchstaben.

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    String user; 
    String a = input.nextLine(); 
    String b = input.nextLine(); 
    String c = input.nextLine(); 
    input.close(); 

    int countOfA = findLowerCaseNumber(a); 
    int countOfB = findLowerCaseNumber(b); 
    int countOfC = findLowerCaseNumber(c); 

    if(countOfA > countOfB && countOfA > countOfC){ 
     System.out.println(a + " has the highest number of lowercase letters " + countOfA); 
     if(countOfB < countOfC) 
      System.out.println(b + " has the lowest number of lowercase letters " + countOfB); 
     else 
      System.out.println(c + " has the lowest number of lowercase letters " + countOfC); 
    } 
    else if(countOfB > countOfA && countOfB > countOfC){ 
     System.out.println(b + " has the highest number of lowercase letters " + countOfB); 
     if(countOfA < countOfC) 
      System.out.println(a + " has the lowest number of lowercase letters " + countOfA); 
     else 
      System.out.println(c + " has the lowest number of lowercase letters " + countOfC); 
    } 
    else { 
     System.out.println(c + " has the highest number of lowercase letters " + countOfC); 
     if(countOfB < countOfC) 
      System.out.println(b + " has the lowest number of lowercase letters " + countOfB); 
     else 
      System.out.println(a + " has the lowest number of lowercase letters " + countOfA); 
    } 
} 

public static int findLowerCaseNumber(String str){ 
    int lowerCaseLetters = 0; 
    for(int i = 0; i < str.length(); i++) 
     // I prefer to use the ASCII values of lower case letters but what you have used is also correct. 
     if(str.charAt(i) > 96 && str.charAt(i) < 123) 
      lowerCaseLetters++; 
    return lowerCaseLetters; 
} 

Statt manuell die Zählung der einzelnen Strings zu vergleichen, können Sie auch die Math.max() und Math.min(), wie erwähnt Nullpointer die Lösung abzuleiten.

+0

OK, mir ist klar, dass es sehr unklar war. Aber im Grunde sollte die Ausgabe wie sein: "die Eingabe" hat die maximale Anzahl der Kleinbuchstaben von: "3" oder wie viel die Eingabe ist "die Eingabe" hat die minimale Anzahl von Kleinbuchstaben: "1" –

+0

ich wirklich schätze die Hilfe. Was ich falsch gemacht habe, war, dass ich versuchte, sie alle zusammen nicht getrennt zu machen. –

1

Ihre aktuellen Code ausführt finden wie folgt:

if (x > y && x > z); // no statement executed even if the condition is satified 
System.out.print(user + " has the highest number of lowercase letters" + a); // would print to console no matter x,y,z is max of min 
if (y > z && y < x); // same as above 
System.out.print(user + " has the lowerst number of lowercase letters" + b); // same as above 

auch die max, um herauszufinden, Sie nutzen Math.max(int,int) wie machen:

Math.max(x, Math.max(y,z)); // this would return the max out of three 

In ähnlicher Weise können Sie auch versuchen, das Minimum zu ermitteln und dann auszudrucken.

System.out.print(user + " has the lowest number of lowercase letters" + Math.min(x, Math.min(y,z))); 
+0

oh ok werde ich Math.max() verwenden und zurück zu Ihnen danke –

0

Ihre Aufgabe hat mich ein paar Fragen:
1. Die Schleife for (int i = 0; i < 3; i++) sagt, dass Sie nur die ersten drei Zeichen der Eingabezeichenfolgen zählen - a, b und c. Und Sie drucken das Ergebnis jede Iteration. Sind solche Bedingungen des Problems?
2. Sie haben user dreimal gelesen. Es ist normal?

Wie auch immer, es ist die Art und Weise einer Zählung von Kleinbuchstaben durch Ströme:

private static long getLowerCaseCount(String str) { 
    return str.chars().map(i -> (char)i).filter(Character::isLowerCase).count(); 
} 

Verwendung:

long x = getLowerCaseCount(a); 
long y = getLowerCaseCount(b); 
long z = getLowerCaseCount(c); 
long min = Math.min(x, Math.min(y, z)); 
long max = Math.max(x, Math.max(y, z)); 
+0

Oh nein, es ist nicht ich sehe was du meinst. Was ich brauchte, war, den Benutzer zu bitten, dreimal einzugeben. Das, was ich lehrte, würde etwas wie sein."DER EINGANG" "hat die maximale Anzahl von Kleinbuchstaben von:" "3" –

Verwandte Themen