Announcement

Collapse
No announcement yet.

Doppelwürfel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Doppelwürfel

    Hallo alle mit einander!
    Könntet ihr mir helfen? Ich habe grade ein Problem, ich komme bei einer Aufgabe einfach nicht weiter.
    Ich muss beim DoppelWürfel ein Lösungswort und einen Klartext eingeben. Das Lösungswort soll dem Alphabet nach geordnet werden und dann in Zahlen umgewandelt werden also =schwarzwald -> aacdh... das habe ich geschafft, was ich jedoch nicht schaffe ist die Buchstaben einer Zahl zuzuordnen!
    Also so in etwa
    S C H W A R Z W A L D
    8 3 5 9 1 7 11 10 2 6 4
    Das muss man doch mit einem 2dimensionalen Array machen, aber wie?

    Hier ein Teil meines Codes:
    Code:
    String losungsword=ZumKodieren;
    			String[][]kombination;
    			char[] losung = new char[losungsword.length()];    
    			losungsword = losungsword.toLowerCase();
    			losung=losungsword.toCharArray();
    			for(int x=0 ; x<losung.length ; x++){
    				for(int y=0 ; y<losung.length ; y++){
    					if(losung[x]<losung[y]){
    						char temp = losung[x];
    						losung[x] = losung [y];
    						losung[y] = temp;
    					}
    				
    					for (int i=0; i<=losung.length; i++)
    					{	
    						
    						kombination = new String [2][i];
    						kombination[i][0] = i;
    						
    						
    					}
    				}
    
    		}
    Könntet ihr mir behilflich sein? Wäre supi!
    Danke im Voraus Melani

  • #2
    Nein, es reicht ein eindim. Array.

    Wenn A=1 und B=2 usw. dann ein Array

    [1]=8
    [2]=3
    .....

    Das sortieren geht auch einfacher

    String eingabe="Schwarzwald";
    char[]t=eingabe.toLowerCase().toCharArray();
    Arrays.sort(t);
    System.out.println(t);

    aacdhlrswwz
    Zuletzt editiert von Christian Marquardt; 12.05.2010, 15:54.
    Christian

    Comment


    • #3
      Arrays.sort und Map&lt;Character, Integer&gt;

      Hallio melani2010,
      Deinen Code zum Erstellen und Sortieren des char-Arrays kann man etwas kürzer schreiben.
      Code:
      String losungsword="ZumKodieren";
      char[] losung = losungsword.toLowerCase().toCharArray();
      Arrays.sort(losung);
      Und die Zuordnung von Buchstaben zu Zahlen würde ich mit einer sog. Map (http://java.sun.com/javase/6/docs/ap.../util/Map.html) machen:
      Code:
      Map<Character, Integer> zahlenZuordnung = new HashMap<Character, Integer>();
      zahlenZuordnung.put('a', 1);
      zahlenZuordnung.put('b', 2);
      ....
      zahlenZuordnung.put('z', 26);
      Dann die Schleife zum Durchgehen des char-Arrays
      Code:
      for (final char c : losung) {
        System.out.print(zahlenZuordnung.get(c);
      }
      http://www.winfonet.eu

      Comment


      • #4
        Bei der Zuordnung müsste man die verwendeten Zeichen aber nach Benutzung entfernen. Wenn z.B. 'a' doppelt vorkommt wie im Beispiel oben, dann müsste das erste 'a' eine 1 liefern und das zweite 'a' eine 2. Deswegen wenn ein Buchstabe benutzt wurde diesen aus der Map entfernen.

        Comment


        • #5
          http://homepages.fh-giessen.de/~hg71.../hausueb1.html


          Warum müsste man den entfernen?
          Christian

          Comment


          • #6
            Dass der Buchstabe bei mehrfacher Verwendung eine andere Zahl liefern muss, habe ich aus der Ursprungsfrage nicht erkennen können. Ist mir beim Vergleich der Zahlen mit den Buchstaben (Schwarzwald) nicht aufgefallen.

            Bei der Zuordnung müsste man die verwendeten Zeichen aber nach Benutzung entfernen. Wenn z.B. 'a' doppelt vorkommt wie im Beispiel oben, dann müsste das erste 'a' eine 1 liefern und das zweite 'a' eine 2. Deswegen wenn ein Buchstabe benutzt wurde diesen aus der Map entfernen.
            Wie Christian schon richtig anmerkt, müsste man ihn nicht entfernen. Vielmehr müsste man die Zahl, auf die er mappt, nach jeder bentzung um eins erhöhen. Also Schleifen-Code wie folgt anpassen:
            Code:
            for (final char c : losung) {
              final int zahl = zahlenZuordnung.get(c);
              System.out.print(zahl);
              zahlenZuordnung.put(c, zahl +1);
            }
            Vielleicht macht es auch Sinn, das Mapping von characters auf Zahlen und das Inkrementieren nach Zugriff in eine eigene Klasse auszulagern.
            http://www.winfonet.eu

            Comment


            • #7
              Code:
              S C H W A R Z  W  A L D
              8 3 5 9 1 7 11 10 2 6 4
              Das erste A hat eine 1, das zweite A hat eine 2

              Einfach erhöhen kann man nicht, denn so wäre A bei der zweiten Verwendung 2 und C auch.

              Die Map fällt dann wohl auch flach, weil man für denselben Key nicht zwei Einträge haben kann.

              Comment


              • #8
                Was denn nu?

                Einfach erhöhen kann man nicht, denn so wäre A bei der zweiten Verwendung 2 und C auch.
                Ja, A ist bei der zweiten Verwendung 2, bei der dritten 3 usw. Deine Annahme bei C stimmt nicht ganz. C ist bei der ersten Verwendung 3, bei der zweiten 4, bei der dritten 5 usw.

                Die Map fällt dann wohl auch flach, weil man für denselben Key nicht zwei Einträge haben kann.
                Braucht man das denn? Davon steht in der Ursprungsfrage nichts. Dort steht:
                was ich jedoch nicht schaffe ist die Buchstaben einer Zahl zuzuordnen!
                Genau das macht die Map. Lass uns vielleicht mal abwarten, ob melani's Anforderungen erfüllt sind, bevor wir über weitere diskutieren.
                http://www.winfonet.eu

                Comment


                • #9
                  Braucht man das denn? Davon steht in der Ursprungsfrage nichts.
                  Wenn man sich das Demo anschaut, ist das Erhöhen unschädlich...
                  Christian

                  Comment


                  • #10
                    Danke für eure schnelle Hilfe, ihr habt mir echt weiter geholfen!
                    Ich werde das jetzt mal anwenden, das mit der Map wusste ich garnicht!
                    Nochmals Danke! Gruß Melani

                    Comment


                    • #11
                      @Christian:
                      Doch es ist schon schädlich.

                      Beispiel:

                      Mit Map:

                      Code:
                      A C
                      1 2
                      Kommt jetzt A zwei mal vor hat A bei den zweiten Verwendung den Wert zwei und C bei der ersten Verwendung -> schlecht

                      Comment


                      • #12
                        "spaltenweise in der Reihenfolge der Losungsnummern"

                        Die Nummern haben keinen Wert für die Verschlüsselung. Sie geben lediglich die Reihenfolge an. Wenn man spaltenweise links -> rechts arbeit müsste das doch egal sein???

                        Vielleicht kriegen wir das Ergebnis und können testen....oder einer programmiert das mal....
                        Christian

                        Comment


                        • #13
                          Ich hab eben eine Rücksprache gehabt, wo man mir vom Map abgeraten hat. Man hat mir das 2dim Array angepriesen, also bin ich wieder am Anfang.

                          Denn der Map erzeugt ja dann ein weiteres "a" und überschreibt dieses nicht, und ein Fehler wäre also nur eine Frage der Zeit.

                          Ich muss die Hausuebung machen die Christian Marquardt bei Post #5 reigestellt hat, ich würde mich freuen wenn ihr mir dabei weiter helfen könntet.

                          Gruß Melani

                          Comment


                          • #14
                            Denn der Map erzeugt ja dann ein weiteres "a" und überschreibt dieses nicht
                            Das Gegenteil ist korrekt
                            Christian

                            Comment


                            • #15
                              Christian hat Recht

                              Originally posted by Christian Marquardt View Post
                              Das Gegenteil ist korrekt
                              Christian hat Recht, wenn man put('a', 1); aufruft, mappt a nach 1. Wenn man danach z.B. put('a', 7) aufruft, wird das alte Mapping überschrieben und a mappt dann nach 7. Die Erzeugung eines zweiten Mappings würde auch keinen Sinn machen, wenn man drüber nachdenkt. Was sollte dann die Methode get('a') zurückliefern, wenn 'a' zwei mal als key vorhanden ist. In einer Map ist jeder key nur einmal enthalten.

                              Gruß ngomo
                              http://www.winfonet.eu

                              Comment

                              Working...
                              X