2D Array füllen und ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 2D Array füllen und ausgeben

    Hallo @ all

    Ich habe in meinem Programm ein 2D Char Array(17,9). Nun möchte jede ungerade Zeile mit "----" füllen und jede gerade Spalte mit "B" bzw. "|". Zum Schluss möchte ich das ganze dann noch als Feld ausgeben lassen.

    Dachte mir das so:

    Quellcode

    1. void setzen(char acFeld[][9])
    2. {
    3. int iX, iY;
    4. for (iX=0; iX<9; iX++)
    5. {
    6. if (iX==1 or iX==3 or iX==5 or iX==7 or iX==9)
    7. {
    8. for (iY=0; iY<17; iY++)
    9. {
    10. acFeld[iX][iY]='-';
    11. }
    12. }
    13. else
    14. {
    15. for (iY=0; iY<17; iY++)
    16. {
    17. if (iY%4!=0)
    18. {
    19. acFeld[iX][iY]='B';
    20. }
    21. else
    22. {
    23. acFeld[iX][iY]='|';
    24. }
    25. }
    26. }
    27. }
    28. for (iX=0; iX<9; iX++)
    29. {
    30. for (iY=0; iY<17; iY++)
    31. {
    32. printf("%c", acFeld[iX][iY]);
    33. }
    34. printf("\n");
    35. }
    36. }
    Alles anzeigen


    Er gibt immer aus:

    |BBB|BBB|--------
    ---------|BBB|BBB||BBB|BBB
    |BBB|BBB|--------
    ---------|BBB|BBB||BBB|BBB

    usw. aus. Ich möchte es aber sozusaegn als Feld ausgeben. Also das 4x4 kleine Quadrate entstehen. Ca. so:

    -------
    |BBB|
    -------

    Was ist falsch an dem Code? Hoffe auf eure Hilfe. Viele Grüße
    Crosaider
  • Problemlösung in Java

    Guten Morgen!
    Ich stimme da Koljan777 zu, dass du die Dimensionen vertauscht hast. Erst Zeilen, dann Spalten...
    Ich kann dir das leider nur in Java liefern(lange Geschichte :whistling: ), aber es sollte dir ja nur die Logik zeigen (bzw. dass es mit dem Tausch Zeilen und Spalten klappt ;) )
    Ich hoffe ich hab richtig verstanden wie deine Ausgabe aussehen soll.(Sonst nochmal bitte beschreiben).


    Die Ausgabe mit unten stehenden Code wäre nun:

    |BBB|BBB|BBB|BBB|
    ------------------------ (erhöht für Ansicht)
    |BBB|BBB|BBB|BBB|
    ------------------------
    |BBB|BBB|BBB|BBB|
    ------------------------
    |BBB|BBB|BBB|BBB|


    Quellcode

    1. public class Array2D {
    2. static int zeilen = 7;
    3. static int spalten = 17;
    4. static char[][] array = new char[zeilen][spalten];
    5. public static void main(String[] args) {
    6. for(int i=0; i<zeilen; i++){
    7. for(int j=0; j<spalten; j++){
    8. if(j%4 != 0){
    9. array[i][j] = 'B';
    10. }
    11. else{
    12. array[i][j] = '|';
    13. }
    14. }
    15. if(i%2 == 1){
    16. for(int k=0;k<spalten;k++){
    17. array[i][k] = '-';
    18. }
    19. }
    20. }
    21. for(int i=0;i<zeilen;i++){
    22. for(int j=0;j<spalten;j++){
    23. System.out.print(array[i][j]);
    24. }
    25. System.out.println();
    26. }
    27. }
    28. }
    Alles anzeigen


    mfg
    kauyon

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von kauyon ()

  • habs mal in C umgeschrieben und ausprobiert. Er gibt mir das genauso aus wie am Anfang. Nichts hat sich verändert :(

    Quellcode

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. char acFeld[17][9];
    5. int i,j,k;
    6. int zeilen=9;
    7. int spalten=17;
    8. for (i=0; i<zeilen; i++)
    9. {
    10. for (j=0; j<spalten; j++)
    11. {
    12. if (j%4!=0)
    13. {
    14. acFeld[i][j]='B';
    15. }
    16. else
    17. {
    18. acFeld[i][j]='|';
    19. }
    20. }
    21. if (i%2==1)
    22. {
    23. for (k=0; k<spalten; k++)
    24. {
    25. acFeld[i][k]='-';
    26. }
    27. }
    28. }
    29. for (i=0; i<zeilen; i++)
    30. {
    31. for (j=0; j<spalten; j++)
    32. {
    33. printf("%c", acFeld[i][j]);
    34. }
    35. printf("\n");
    36. }
    37. getchar();
    38. }
    Alles anzeigen
  • Ja weil du den gleichen Fehler nochmal tust....

    char acFeld[17][9];

    Zeilen ist das 1. Element...

    Also

    char acFeld[9][17];

    Dann kommt das richtige raus, getestet:

    Quellcode

    1. #include <stdio.h>
    2. #define zeilen 9
    3. #define spalten 17
    4. int main(void){
    5. char acFeld[zeilen][spalten];
    6. int i,j,k;
    7. for (i=0; i<zeilen; i++)
    8. {
    9. for (j=0; j<spalten; j++)
    10. {
    11. if (j%4!=0)
    12. {
    13. acFeld[i][j]='B';
    14. }
    15. else
    16. {
    17. acFeld[i][j]='|';
    18. }
    19. }
    20. if (i%2==1)
    21. {
    22. for (k=0; k<spalten; k++)
    23. {
    24. acFeld[i][k]='-';
    25. }
    26. }
    27. }
    28. for (i=0; i<zeilen; i++)
    29. {
    30. for (j=0; j<spalten; j++)
    31. {
    32. printf("%c", acFeld[i][j]);
    33. }
    34. printf("\n");
    35. }
    36. getchar();
    37. }
    Alles anzeigen
  • :D habe aber gerade noch ein anderes kleines Problem:

    Quellcode

    1. int iZahl=3;
    2. acFeld[iX][iY]=iZahl;
    3. printf("%c", acFeld[iX][iY]);


    Wenn ich es ausgebe kommt immer ein Herz - oder ein anderes Zeichen jenachdem wie groß der Wert gerade ist. Liegt glaube ich daran das ich in das Char Array eine Int Variable einfügen will. Wie kann ich das beheben?
  • Ist ja klar das nen Herz kommt da du ja nen Char Array hast.
    Das 3te Ascii Zeichen ist ein Herz.
    Wenn du die Zahl 3 Ausgeben willst als char musst du 51 nehmen
    hier ne kleine liste
    Ascii Nr. 48 = '0'
    Ascii Nr. 49 = '1'
    Ascii Nr. 50 = '2'
    Ascii Nr. 51 = '3'
    Ascii Nr. 52 = '4'
    Ascii Nr. 53 = '5'
    Ascii Nr. 54 = '6'
    Ascii Nr. 55 = '7'
    Ascii Nr. 56 = '8'
    Ascii Nr. 57 = '9'

    Hoffe das hilft irgendwie wenn ich das problem jetzt richtig verstanden hab