Buchstaben, die in zwei Wörtern vorkommen

C.Hermanos

Mitglied
Hallo,
der Benutzer soll zwei beliege Wörter in der Konsole eingeben.
Die Konsole gibt dann aus, wieviele Buchstaben und welche in beiden Wörtern vorkommen.

Die Ausgabe sollte z.B. so aussehen:

Eingabe1: Halli
Eingabe2: Galli

Ausgabe: 3 Buchstaben sind in beiden Wörtern vorhanden: a,l,i

Ich habe eine Idee wie ich es machen würde bin mir aber nicht so sicher:

For-Schleifen durchlaufen lassen und in den For Schleifen if-Anweisungen, wo die beiden Wörter vergleicht.
Könnt ihr mir Tipps bzw Lösungsvorschläge geben?
Danke
 
Du hast die Wörter "Nudelsuppe" und "Pansensalat" aus einem Blatt Papier stehen. Wie würdest du die Aufgabe ohne Computer lösen?
 
Hört sich schon brauchbar an. Genau so musst du es auch umsetzen. Bedenke, dass du doppelte Buchstaben nicht berücksichtigen musst. Dazu lohnt es sich Set in Java anzuschauen.
Du kannst aber auch gleich ein Set für jedes Wort bilden und dann einfach die Schnittmenge ausgeben
 
würd ich so machen:
Java:
		String s = "Dein String";
		Set<Character> set = new HashSet<Character>();
		for (char c : s.toCharArray())
			set.add(c);

mit Arrays.asList und dann addAll bzw das HashSet gleich mit dem Collection-Konstruktor instanzieren wird afaik net gehen. Ausser du erstellst manuell ein Character-Array. Da ist mir persönlich das obige lieber.
 
mit Arrays.asList und dann addAll bzw das HashSet gleich mit dem Collection-Konstruktor instanzieren wird afaik net gehen.

Außer man benutzt nicht Character sondern Strings mit der Länge 1 *g*

Java:
		Set<String> set = new HashSet<String>(Arrays.asList("Halli".toLowerCase().split("(?<=.)")));
		Set<String> set2 = new HashSet<String>(Arrays.asList("Galli".toLowerCase().split("(?<=.)")));

Dann einfach eines der Sets durchlaufen und das andere mit contains prüfen und nen Counter hochzählen 😳
(würde aber auch bei der ersten Idee bleiben wohl...)
 
Hier noch eine Alternative.
Java:
public class Main {

    public static void main(String[] args) {
        String a = "Halli";
        String b = "Galli";
        HashSet set = new HashSet();
        Matcher m = Pattern.compile("[" + a + "]", 2).matcher(b);
        for (int i = 0; m.find(i); i = m.end()) {
            set.add(m.group());
        }
        System.out.println(set);
    }
}
 
naja ich denk da gibt's viele Möglichkeiten aber ich würd's primitiv halten. nachdems keine primitiven generics gibt, wenigstens mit wrapper und autoboxing. auf jedenfall würd ich nicht komplett auf generics verzichten, wie in deinem Beispiel 🙂
 
Eine mergesort-artige Lösung ohne Sets:
Java:
        char[] w1 = "Halli".toCharArray();
        char[] w2 = "Galli".toCharArray();
        Arrays.sort(w1);
        Arrays.sort(w2);
        StringBuilder common = new StringBuilder();
        int i1 = 0;
        int i2 = 0;
        while (i1 < w1.length && i2 < w2.length) {
            char c1 = w1[i1];
            char c2 = w2[i2];
            if(c1 == c2) common.append(c1);
            while(c1 <= c2 && i1 < w1.length && w1[i1] == c1) i1++;
            while(c2 <= c1 && i2 < w2.length && w2[i2] == c2) i2++;
        }

        System.out.println(common);
 
Ersteinmal danke für eure Antworten!
Aber ich habe es wesentlich einfacher hinbekommen als eure Antworten xD

Java:
import java.util.Scanner;

public class buchstaben{
  public buchstaben(){
  
  Scanner sc = new Scanner(System.in);

  System.out.print("Eingabe1: ");
  String eingabe1 = sc.nextLine();
  
  System.out.print("Eingabe2: ");
  String eingabe2 = sc.nextLine();
  
  int count = 0;

  for (int i = 0;i < eingabe1.length(); i++){
    for(int k = 0;k < eingabe2.length(); k++){


     if(eingabe1.charAt(i) == eingabe2.charAt(k)){

     count++;
     }
    }
   }
  
  System.out.print("Ausgabe: " + count + " Buchstabe(n) sind in beiden Eingaben vorhanden\n");


  }
 public static void main(String [] args){
   new buchstaben();
 }
}

Allerdings:
Hier gibt er zurecht 1 aus:
Eingabe1: Hund
Eingabe2: Katze

Aber hier gibt er 6 aus, obwohl er 3 ausgeben sollte:
Eingabe1: Halli
Eingabe2: Galli

Wie mache ich das richtig?
 
naja du findest eben 4x das l. was meinst du denn, warum wir dir Sets empfehlen?? du kannst jetzt entweder ein Set nehmen oder dir alle gefundenen Buchstaben merken und mit && !contains abprüfen. ahja, du zweckentfremdes da den Sinn eines Konstruktors ganz schön
 
LOL! Viel einfacher, geht nur nicht...

<Weisheit>Es gibt zu jedem Problem eine einfache Lösung - und eine korrekte.</Weisheit>
 

Zurück
Oben