ASCII-Art Haus

  • Themenstarter Themenstarter Chriskant
  • Beginndatum Beginndatum
C

Chriskant

Gast
Hallo,

ich habe folgendes Problem:

Ich soll mit Hilfe einer for-Schleife ein Haus-ähnliches Gebilde ausgeben lassen. Der Benutzer wird aufgefordert eine positive Zahl einzugeben und diese Gebilde aus ausgegeben werden.

+--+
/ \
/ \
+ +
| |
| |
+-------+

so in etwa. Das Haus gilt für das Beispiel n=2.

Ich habe wirklich keine Ahnung wie ich dieses Problem angehen soll. Könnte mir das evtl. jemand erklären?

Danke im Vorraus.

Chris
 
Zuletzt bearbeitet von einem Moderator:
So müsste es gehen:

Java:
//vorher eingabe n


for(int i=0; i <= n; ++i){
  if( i ==0){
    System.out.println("+--+");
    System.out.println(" /   \ ");
    System.out.println(" /   \ ");
  }
    else if ( i == n) System.out.println ("+------+") ;
      else {
               System.out.println("+   +");
              System.out.println("|   |");
              System.out.println("|   |");
  }
}

beim ersten Durchlauf wird das Dach ausgegeben, beim letzten der Boden, sonst Etagen
 
Zuletzt bearbeitet:
ach warum denn ... so funzt das ganz gut wenn du "\ " escapest du ja nur das whitespace ... ansonten natürlich richtig : "\\"
 
Ach ja richtig " \\ " daran habe ich mich nicht mehr erinnern können. ^^
Bei " \ " kommt die Meldung "illegal escape character".
 
Also gleich vorweg, ich habe noch keinen Plan von Java.
(schon aber diverse andere Programmiersprachen )

Bevor die Aufgabe gelöst werden kann, sollte vielleicht erst mal klar werden, was rauskommen soll.
Für Input 2 , soll wohl sowas rauskommen ?
Code:
    +--+     // 4 " ", 1 "+", 2  "-", 1 "+"
   /      \     // 3 " ", 1 "/" , 6  " ", 1 "\"
  /        \    // 2 " ", 1 "/" , 8  " ", 1 "\"
+          +  // 0 " ", 1 "+",10 " ", 1 "+" 
 |          |   // 1 " ", 1 "|", 10 " ", 1 "|"
 |          |   // 1 " ", 1 "|", 10 " ", 1 "|"
+--------+  // 0 " ", 1 "+", 8 "-", 1 "+"
für Input 3 dann vielleicht das ?
Code:
     +---+       // 5 " ", 1 "+", 3   "-", 1 "+"
    /       \       // 4 " ", 1 "/" , 8   " ", 1 "\"
   /         \      // 3 " ", 1 "/" , 10 " ", 1 "\"
  /           \     // 2 " ", 1 "/" , 12 " ", 1 "\"
+             +   // 0 " ", 1 "+", 13 " ", 1 "+" 
 |             |    // 1 " ", 1 "|" , 13 " ", 1 "|"
 |             |    // 1 " ", 1 "|" , 13 " ", 1 "|"
 |             |    // 1 " ", 1 "|" , 13 " ", 1 "|"
+----------+   // 0 " ", 1 "+", 10 "-", 1 "+"
 
ohjee..
das funktioniert ja nicht wirklich gut..
jetzt mal mit Java-Tags
für Input = 3

Java:
    +---+
   /     \
  /       \
 /         \
+           +
|           | 
|           | 
|           | 
+-----------+
 
Also ich weiss ja nun immer noch nicht, was da eigentlich herauskommen soll.
Trotzdem hab ich mich mal mit Jave versucht. Mein erstes Programm in Java so to say:
Java:
import java.util.Arrays;

public class CMyClass {
  public static void main (String[] args) {

    int n=3; // should be user input

    int iLen = n*3+2;
    int iA = n+2;
    int iB = n+1;

    // create strings filled with blanks and dashes
    char[] chBuf = new char[ iLen ];
    Arrays.fill(chBuf, '-');
    String strDash = new String(chBuf);
    String strBlank = strDash.replaceAll("-"," ");
    
    String strLine = strBlank.substring(1,iA) + "+" ;
    strLine = strLine + strDash.substring(1,iB);
    strLine = strLine + "+";

    System.out.println(strLine);
    
    for(int i=0; i < n ; ++i){
      iA=iA-1;
      iB=iB+2;
      strLine = strBlank.substring(1,iA) + "/" ;
      strLine = strLine + strBlank.substring(1,iB);
      strLine = strLine + "\\";
      System.out.println(strLine);
    }

    strLine = "+" + strBlank + "+" ;
    System.out.println(strLine);

    for(int i=0; i < n ; ++i){
      strLine = "|"+ strBlank + "|";
      System.out.println(strLine);
    }

    strLine = "+" + strDash + "+" ;
    System.out.println(strLine);

  }
}
 
Noch eine Variante, wobei n als Argument übergeben wird.
Die Konstruktion eines mit Bindestrichen bzw. Leerzeichen gefüllten Strings einer bestimmten Länge
habe ich hier ebenfalls variiert.

Java:
//
//>java CMyClass 1
//  +-+
// /   \
//+     +
//|     |
//+-----+
//
//>java CMyClass 3
//    +---+
//   /     \
//  /       \
// /         \
//+           +
//|           |
//|           |
//|           |
//+-----------+
//
public class CMyClass 
{
  public static void main (String[] args) 
  {

    int n = Integer.parseInt(args[0]);
    int iLen = n*3+2;
    int iA = n+1;
    int iB = n;

    // create strings filled with blanks and dashes    
    String strDash = "-";
    String strBlank = " ";

    int iC = 1 + (int) ( Math.log(iLen)/Math.log(2) );  

    for(int i=0; i < iC ; ++i)
    {
      strDash=strDash + strDash;
      strBlank=strBlank + strBlank;
    }

    strDash = strDash.substring(0,iLen);
    strBlank = strBlank.substring(0,iLen);

    // Top of the roof
    
    String strLine = strBlank.substring(0,iA) + "+" ;
    strLine = strLine + strDash.substring(0,iB);
    strLine = strLine + "+";

    System.out.println(strLine);

    // roof
    
    for(int i=0; i < n ; ++i)
    {
      iA=iA-1;
      iB=iB+2;
      strLine = strBlank.substring(0,iA) + "/" ;
      strLine = strLine + strBlank.substring(0,iB);
      strLine = strLine + "\\";
      System.out.println(strLine);
    }

    // top of the body    
    System.out.println("+" + strBlank + "+");

    // body 

    for(int i=0; i < n ; ++i)
    {
      System.out.println("|"+ strBlank + "|");
    }

    // base

    System.out.println("+" + strDash + "+");

  }
}
 

Zurück
Oben