Eine String Matrix erstellen die eine boolean Funtion verwendet

Trümmermacher

Bekanntes Mitglied
Hi leute ich habe eine Frage ich weiss nicht weiter,

ich will das eine String Matrix erstellt wird die soll aber eine boolean funkton nutzen aber ich weiß nicht wie das funktionieren soll .

Hier ist mein bisheriger Code:

Java:
package arrays;

public class verkleinernarray {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

      
        String [][] a = {{"aaa", "aaa"},
                                 {"bbb", "bbb"}}    ;
      
      
        printMe(magnify(a, 2));
      
      
   
}
    public static void magnify (boolean [][] boolMatrix, int f){
        boolean[][] newMatrix = new boolean [boolMatrix.length/f][boolMatrix[0].length/f];
      
        for(int i=0; i<newMatrix.length; i++){
            for (int k=0; k<newMatrix[i].length; k++)
              
                newMatrix[i][k]=boolMatrix[i*f][k*f];
        }
        for(int i =0; i<newMatrix.length; i++){
            for(int k=0; k<newMatrix[i].length; k++)
                System.out.print(newMatrix[i][k]);
            System.out.println();
        }
      
      
      
    }  
    public static void printMe(String  [][]a){

        for(int i=0; i<a.length;i++){
            for(int k=0; k<a[i].length;k++){
            System.out.print(a[i][k]);
        }
            System.out.println();
        }
    }
  
    }
 
Zuletzt bearbeitet von einem Moderator:
DOCH DAS MUSS GEHEN DA ES EINE KLAUSURAUFGABE IST

Es ist die Aufgabe 3 und davon der Teil b .A ist klar den magnifier kann ich proggen aber ich versteh nicht wie ich ein boolean array in ein char oder string array überführen kann .
 

Anhänge

In der Aufgabe ist nirgends davon die Rede, dass ein String-Array erzeugt werden soll. Du sollst einach nur eine print-Methode für dein boolsches Array schreiben!

Mal abgesehen davon ist die Aufgabe murks. Du kannst ein Array nämlich gar nicht vergrößern, wie es in der Aufgabe gefordert ist. Einmal angelegt, ist die Größe fix. Du kannst höchstens ein neues Array anlegen, welches den Anforderungen genügt. Andere Programmteile, welche auf das ursprüngliche Array verweisen, bekommen davon aber nichts mit.

Deine Methode magnify soll übrigens nichts ausgeben!
 
Also ich habe mir das einmal durchgelesen und vorweg:
Wer diese aufgaben verfasst hat, gehört geschlagen (buchstäblich). Die Aufgaben sind teilweise so ungenau gefasst, dass es selbst für Leute, die sprachlich keine Probleme beim Programmieren haben, diese nicht richtig lösen können. Aufgabe 1 zum Bleistift, hat leere Methodenkörper weshalb area() nirgends verwendet wird, in dem gesamten Beispiel! Es lässt sich nur anhand der Ausgabe vermuten, dass diese einen float oder double zurückgibt. Wenn ich da allerdings long reinschreibe kann ich immer noch anhand der Einheit argumentieren, dass die Fläche ausreichend genau berechnet wird. Ebenso geht String.
Aufgabe 2 ist so unglaublich wage, dass ich gar nicht weiß, ob es dafür eine richtige Lösung geben kann. Warum ist phonebook ein array? Es enthält nur einen String!? Das Beispiel enthält schon das Ergebnis einer Umwandlung der Mobilfunknummer, allerdings wird nie gezeigt, wie diese unbearbeitet aussieht. Sind ';' als Trennzeichen konsistent? Gibt es auch leere Attribute(ist mit ,,nicht jeder Eintrag vollständig ist'' das gemeint)? Alleine um Sonderfälle abzufangen, müsste man da schon einige schreiben...

Zu Aufgabe 3:
Arrays kann man nur vergrößern, indem man ein größeres Array erstellt und die Werte umkopiert.

Java:
boolean[][] newMatrix = new boolean [boolMatrix.length/f][boolMatrix[0].length/f];
Das kann so schonmal nicht funktionieren, da dein neues Array kleiner wird, vielleicht mal / durch * austauschen.

Java:
newMatrix[I][k]=boolMatrix[i*f][k*f];
Das wird bei booleans nicht mal funktionieren, da du wahr und falsch nicht multiplizieren kannst. Zudem ist das auch nicht teil der Aufgabe.

Was du innerhalb deiner i und k Schleifen machen musst: Schau dir den Faktor an (z.B. f = 3), dann bedeutet dass, dass jede Zelle in deiner alten Matrix eine f * f = 3 * 3 große Fläche einnimmt. Das heißt du musst für jede Zelle aus deinem Eingabearray einen f * f großen Bereich in deiner neuen Matrix füllen. Dazu ist es recht hilfreich, wenn du dir eine kleine Hilfsmethode schreibst, welche eben ein Array entgegen nimmt, einen boolean Wert, jeweils 2 integer für x,y (oder bei dir i,k) für den Start -und den Endpunkt des Bereichs. Diese Methode muss dann in dem übergebenen Array alle Werte innerhalb des Rechtecks, welches von Start -und Endpunkt aufgespannt wird, mit einem angegeben Wert füllen.
Dann musst du bei anstelle von
Java:
newMatrix[I][k]=boolMatrix[i*f][k*f];
nur noch ausrechnen, was Start -und Endpunkte sind und bist fertig.


Hier nochmal meine Lösung, sollte stimmen, habe es jedoch nur eben schnell programmiert. Es sollte jedoch recht anschaulich zeigen, was zu tun ist.
[/I][/I]
Java:
[I][I]public static void main(String[] args)
   {
     boolean[][] b = {
               {true, false},
               {false,false}
             };
         
     System.out.println("Original: ");
     printMatrix(b);
     
     System.out.println("\nNew:");
     printMatrix(magnify(b, 3));
     
   }
   
   
   public static boolean[][] magnify (boolean[][] array, int factor)
   {
     if (array == null )
     {
       throw new IllegalArgumentException("Input array invalid: array may not be null!");
     }
     
     if (factor < 1)
     {
       throw new IllegalArgumentException("Input factor value invalid: factor must be bigger than zero!");
     }
     
     boolean[][] expandedArray = new boolean[array.length * factor][array[0].length * factor];
     
     
     for (int x = 0; x < array.length; x ++)
     {
       for (int y = 0; y < array[x].length; y ++)
       {
         int startX = x * factor;
         int startY = y * factor;
         int endX = startX + factor;
         int endY = startY + factor;
         
         fillSquare(expandedArray, array[x][y], startX, startY, endX, endY);
       }
     }
     
     
     return expandedArray;
   }
   
   public static void fillSquare(boolean[][] array, boolean value, int startX, int startY, int endX, int endY)
   {
     for (int i = startX; i < endX; i++)
     {
       for (int j = startY; j < endY; j++)
       {
         array[I][j] = value;
       }
     }
   }


   public static void printMatrix(boolean[][] array)
   {
     for (int x = 0; x < array.length; x ++)
     {
       for (int y = 0; y < array[x].length; y ++)
       {
         System.out.print(array[x][y]?" * ":" _ ");
       }
       System.out.println();
     }
   }
[/I]
[/I][/I]
 
Leute, Leute. Ihr wisst doch genau wie die Aufgaben gemeint sind. Natürlich kann man ein array nicht vergrössern, aber man kann das kleinere in ein grösseres überführen nach den Regeln die angegeben sind. Im Berufsleben wird er auch mal unscharfe Anforderungen haben die er in Java-Code umsetzen muss. Und es steht ja ziemlich genau da was er machen soll. Und natürlich ist klar was area(...) macht und was es sinnvollerweise zurückliefert. Und bool'sche werte sind im übrigen nirgends miteinander zu multiplizieren !
 
Leute, Leute. Ihr wisst doch genau wie die Aufgaben gemeint sind. Natürlich kann man ein array nicht vergrössern, aber man kann das kleinere in ein grösseres überführen nach den Regeln die angegeben sind. Im Berufsleben wird er auch mal unscharfe Anforderungen haben die er in Java-Code umsetzen muss. Und es steht ja ziemlich genau da was er machen soll.

Im Berufsleben ja, aber davon reden wir nicht. Wenn man in der Schule oder in der Uni Aufgaben bekommt, dann müssen diese klar verständlich sein. Und das sind diese eben nicht.

. Und natürlich ist klar was area(...) macht und was es sinnvollerweise zurückliefert.
Das kann man sich erschließen, wenn man die Ausgabe sieht, aber dennoch ist das kein guter Stil eine Aufgabe zu stellen. Wenn da String oder long oder floar oder double oder irgendwas anderes zurückgegeben wird, dann muss ja eine Lösung zu dieser Aufgabe geben, die vorgibt, was richtig ist. Und da es keine weiteren Angaben gibt, ist das so wage, dass ich hier sagen würde, dass hier kein Lernerfolg geprüft werden kann.

Und bool'sche werte sind im übrigen nirgends miteinander zu multiplizieren
Da hast du Recht und ich wundere mich, wie ich das aus seinem Text gelesen habe.
 
@Truemmermacher:

1. sollte deine magnify mal was zurückliefern und nicht void sein. Du willst ja das Ergebnis im printMe verwenden.
2. fragts du im printMe halt einfach ab ob der Wert des Elementes true oder false ist und gibst dann einfach das gewünschte Zeichen aus.
 
Wieso ist unklar was area zurückliefert ? Die Kreisfläche und das kann schon mal keine Integer-Zahl sein. Und natürlich könnte er auch die Fläche gleich als String zurückliefern, das wäre dann genau so richtig ! Hauptsache das geforderte Ergebnis wird ausgedruckt !
 

Zurück
Oben