2012-03-28 9 views
1

ich zum Drucken einer quasi-leeren Platz arbeite, die unten wie das Beispiel sieht (10 Sternchen über und 10 nach unten für die 2 Spalten):Java - Drucken eines leeren Platz mit verschachtelten Schleifen

********** 
*  * 
*  * 
*  * 
*  * 
*  * 
*  * 
*  * 
*  * 
********** 

Mein Code Quadrate können nicht dynamisch generiert werden, wie von der Eingabe des Benutzers für die Anzahl der Zeilen und Spalten angegeben (es funktioniert für 10 Zeilen und 10 Spalten, aber sobald ich die Zahl auf 20 ändere, ändert sich die Anzahl der Sternchen nicht. Folgendes ist mein Code:

String STAR = "*"; 
String star1 = "**********"; 
int MAX = 10; 
for (int row = 0; row <= MAX; row += 1) { 
    for (int col = 0; col <= MAX ; col += 10) { 
     if (row == 0 && col == 0) 
      System.out.println(star1); 
     if (row >= 1 && row <= 4) 
      System.out.println(STAR + "  " + STAR); 
     if (row == 10 && col == 10) 
      System.out.println(star1); 
    } 
} 

Jede Hilfe/Beratung ist willkommen in Bezug auf die Dynamik des Codes.

+0

Ihr Code nicht zeigen, wo Sie die Benutzereingaben erfassen. – assylias

+0

Ich schlage vor, Sie beginnen mit dem Debuggen Ihres Programms mit Ihrem Debugger. Gibt es einen Grund, warum Ihre Spalten um 10 erhöht werden? –

+0

Sie haben hier so viele Werte fest programmiert, dass es nicht funktioniert, wenn der Benutzer etwas anderes als zehn liefert. Sie müssen Ihre Definition von star1 basierend auf den Benutzereingaben sowie einer Menge anderer Dinge ändern! Und was ist die Zeile> = 1 && Zeile <= 1? Es scheint falsch und wird auch nicht für zehn funktionieren. –

Antwort

0

Sehen Sie sich Ihre verschachtelten Schleife:

for (int col = 0; col <= MAX ; col += 10) { 

Also, wenn col 10 ist, bist du wirklich nur ein einziges Mal nur Iterieren ... Sie könnten auch nicht die verschachtelte Schleife überhaupt haben.

Außerdem haben sowohl star1 als auch das Zeichenfolgenliteral mit Leerzeichen eine feste Anzahl von Zeichen, die eindeutig mit der Anzahl der Spalten in Beziehung stehen.

Ich gehe davon aus diese Hausaufgaben ist, so dass ich keine weiteren Hinweise geben als die, mit zu beginnen, aber hoffentlich, dass bringen Sie in die richtige Richtung zu denken ...

0

Sie sollten das ändern 3 Vorkommen von 10 in Ihren beiden for Schleifen durch die MAX Variable, so wenn der Benutzer eine andere Größe definieren, wird Ihre for Schleife seine Eingabe anstelle der 10 Wert.

0

Werfen Sie auch einen Blick auf Ihre letzte if-Anweisung, wo es heißt if (row == 10 && col == 10) und denken Sie eine Sekunde darüber nach. Sobald Sie 10 Zeilen und 10 Spalten erreicht haben, werden Sie nur noch die letzte horizontale Zeile von star1 drucken, unabhängig davon, was MAX auch ist.

2
String star = "*"; 
String space = " "; 

int MAX = xxx; 

for (int row = 0; row < MAX; row++) { 
    for (int col = 0; col < MAX; col++) { 
    if (row == 0 || row == MAX - 1) { 
     System.out.println(star); 
    } else if (col == 0 || col == MAX - 1) { 
     System.out.println(star); 
    } else { 
     System.out.println(space); 
    } 
    } 
} 
0

Wie oben erwähnt, ist die verschachtelte for-Schleife ist unnötig und kann ineffizient sein, wenn Sie größere Rechtecke in der Zukunft zu schaffen planen (nicht sagen, Sie haben werden, sondern versuchen, zu bleiben weg von for-Schleifen verschachtelt Wenn du kannst). Drucken Sie einfach star1, bevor Ihre Schleife beginnt und nachdem sie beendet wird. Der Körper der Schleife sollte einfach genug sein. Hoffe das hilft. Hier ist eine andere Lösung, ein vielseitiger ein

0
class Square 
{ 

    public static void main(String[] args) 
    { 
     String tenStars="**********"; 
     String oneStar="*"; 
     int count=0; 

     System.out.println(tenStars); 
     count++; 
     while(count<=8) 
     { 
      System.out.println(oneStar+"  "+oneStar); 
      count++; 
     } 
     System.out.print(tenStars); 

    } 
} 
0

sollte diese

public static void hallowSquare(int side) 
{ 
    int rowPos, size = side; 

    while (side > 0) 
    { 

     rowPos = size; 

     while (rowPos > 0) 
     { 

      if (size == side || side == 1 || rowPos == 1 || rowPos == size) 
       System.out.print("*"); 

      else 
       System.out.print(" "); 
      rowPos--; 
     } 
     System.out.println(); 
     side--; 

    }  

} 
0

arbeiten. Damit können Sie ein leeres Rechteck mit der Höhe „h“ und der Breite „w“

 private static void hallowSquare(int h, int w) 
{ 
    for(int i=1; i<=h; i++) 
    { 
     for(int j=1; j<=w; j++) 
     { 
      if (j==1|| j==w || i==1 || i==h) 
      System.out.print("X"); 
      else 
       System.out.print(" "); 
     } 
     System.out.println(); 
    } 

} 
0

erstellen Sie so etwas wie dies mit einer Benutzereingabe verwenden können ... das funktioniert

public static void drawSquare(int size) 
{ 
     for(int i=1; i<size ;i++) 
     System.out.print("*"); 
     System.out.println(""); 
     for(int i=0; i<50 ;i++) 
     { 
       System.out.print("*"); 
       for(int j =0; j<size-3; j++) 
        System.out.print(" "); 
       System.out.println("*"); 
     } 

     for(int i=1; i<size ;i++) 
       System.out.print("*"); 
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    drawSquare(50); 
} 

sollten Sie nur erstellen Sie eine Klasse in setzen diese in Ihrer Klasse und führen Sie es ... ich hoffe, das wird Ihnen helfen ....

0
class Star8 
{ 
    public static void main(String[] args) 
    { 
     for(int i=1;i<=5;i++) 
     { 
      for(int j=1;j<=5;j++) 
      { 
       if(i==2||i==3||i==4) 
       { 
        System.out.print("* *"); 
        break; 
       } 
       else 
       { 
        System.out.print("*"); 
       } 
      }  
      System.out.println(); 
     } 
    } 
} 
+1

Willkommen bei Stack Overflow! In der Zukunft sollten Sie darauf achten, dass Ihr Code schön formatiert ist, mit der richtigen Einrückung, ohne unnötigen Leerraum usw. Ich habe einige Änderungen vorgenommen, um Ihnen zu helfen. –

0

hoffe, das hilft, vereinfachen Ihr Denken paaren. Denke über die Achsen x und y nach und arbeite nach dieser Logik.Machen Sie eine verschachtelte Schleife für Ihre for-Schleife, die Zeilen durchläuft, in jedem Fall die Zahl die Größe von Quadrat und drucken Sie ein Leerzeichen, nach der verschachtelten Schleife drucken Sie das "*".

> for (int b=0;b<ans*2-3;b++) 

Diese verschachtelte Schleife hat den maximalen Wert von b weil:

erinnern, dass, während ur Druck, jedes „*“ wird von der anderen durch einen Zwischenraum beabstandet und daran denken u zählen nur Raum zwischen dem erste und letzte Spalte. Das bedeutet, dass alle Leerzeichen zwischen x = 0 und x = quadratisch sind, daher sollte max b der Abstand zwischen diesen beiden Koordinaten sein. die sind: Quadrate * 2/die 2 ist für die zusätzlichen Leerzeichen/-3/* -3 weil Sie die erste Koordi (x = 0), letzte Koordi (x = Quadsize), UND 1 Leerzeichen von hinzugefügt die ehemalige Schleife.

import java.util.Scanner; 
public class AsteriksSquare { 

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

     Scanner input= new Scanner(System.in); 
     int ans; 
     System.out.print("Enter the size of the side of the square: "); 
     ans=input.nextInt(); 
     String ast="*"; 
     if (ans>0 && ans<21){ 

      for(int i=0;i<=ans-1;i++){ 
       System.out.print("* "); 


     } 
      System.out.println(""); 
      for(int i=1;i<=ans-2;i++){ 
       System.out.print("*"); 
       for (int b=0;b<ans*2-3;b++){ 
        System.out.print(" "); 

       } 
       System.out.println("*"); 


     } 
      for(int i=1;i<=ans;i++){ 
       System.out.print("* "); 


     } 

} 
} 
} 
0
class square1 
    { 
    public static void main(String[] args) 
     { 
     String star = "*"; 
     String space = " "; 
     int MAX = 5; 
     for (int row = 0; row < MAX; row++) 
     { 
      for (int col = 0; col < MAX; col++) 
      { 
      if (row == 0 || row == MAX - 1) 
       { 
       System.out.print(star); 
       } else if (col == 0 || col == MAX - 1) 
       { 
       System.out.print(star); 
       } else { 
       System.out.print(space); 
       } 
      } 
     System.out.println(); 
     } 
    } 
    } 
+3

Willkommen bei Stack Overflow und vielen Dank für Ihre Antwort. Diese Frage hat 11 andere Antworten, so wie Sie Code schreiben möchten, könnten Sie einen Text hinzufügen, der erklärt, warum Ihre Lösung eine gute ist und besser als einige der anderen. Sie können dies tun, indem Sie auf die Bearbeitungsschaltfläche unterhalb Ihrer Antwort klicken und den Text hinzufügen.Dies könnte Ihnen einige Stimmen der Unterstützung oder Bewunderung für Ihre Bemühungen geben. –

+0

Willkommen bei Stack Overflow. Können Sie Ihre Antwort bitte editieren, um eine Erklärung zu geben, warum dieser Code die Frage beantwortet? Code-only-Antworten werden [entmutigt] (http://meta.stackexchange.com/questions/148272), weil sie die Lösung nicht lehren. – DavidPostill

0

sollte dieser Code den Trick.

package javaPackage; 

public class Square { 

    public static void main(String [] args) 
    { 
     for (int i=0;i<=10;i++) 
     { 
      for (int j=0;j<=10;j++) 
      { 
       if(i==0||i==10){ 
        System.out.print("x"); 
       } 
       else if(j==0||j==10){ 
        System.out.print("x"); 
       } 
       else{ 
        System.out.print(" "); 
       } 
      } 
      System.out.println(); 
     } 
    } 
} 

Wenn der Interpreter sieht, dass Sie auf der ersten und letzten Zeile sind (i = 0 und i = 10), wird die Zeile mit x füllen. Andernfalls wird nur ein x am Anfang und am Ende der Zeile gedruckt.

0

können Sie unter zwei Methoden verwenden.

1) Eine mit minimaler Codezeile.

for (int i = 0; i <= 9; i++) { 
      if (i == 0 || i == 9) { 
       System.out.println("* * * *"); 
      } else { 
       System.out.println("*  *"); 
      } 
     } 

OR

2) Mit Hilfe von zwei for-Schleifen

for (int i = 0; i <= 9; i++) { 
       for (int j = 0; j <= 9; j++) { 
        if (i == 0 || i == 9) { 
         System.out.print("*"); 
        } else { 
         if (j == 0 || j == 9) { 
          System.out.print("*"); 
         } else { 
          System.out.print(" "); 
         } 
        } 
       } 
       System.out.println(); 
      } 

Danke, Stuti

0
import java.util.Scanner; 
class Star 
{ 
    public static void main(String...args) 
    { 
     Scanner sc = new Scanner(System.in); 
     System.out.print("Enter the row : "); 
     int row=sc.nextInt(); 
     System.out.print("Enter the column : "); 
     int column=sc.nextInt(); 
     for(int i=1;i<=column;i++) 
     { 
      System.out.print("*"); 
     } 
     for(int i=row-2;i>=1;i--) 
     { 
      System.out.println(); 
      System.out.print("*"); 
      for(int k=1;k<=column-2;k++) 
      { 
       if(i<1) 
      { 
       break; 
      } 
       System.out.print(" "); 

      } 
      System.out.print("*"); 
     } 
     System.out.println(); 
     for(int i=1;i<=column;i++) 
     { 
      System.out.print("*"); 
     } 
    } 
} 
+0

Können Sie das näher erläutern? Was ist das und wie beantwortet es die Frage des Benutzers? Bearbeiten Sie das in die Antwort. – Ares

+0

@ Ares Im obigen Code kann der Benutzer die Größe der zu druckenden Zeile und Spalte angeben *. – Shubham

-1

Ich bin der Code unten hoffnungsvoll helfen kann, verwendet sehr einfache Codierung und haben das gewünschte Ergebnis.

a=eval(input('Provide the height of the box: ')) 
b=eval(input('Provide the width of the box: ')) 
d=a-2 
r=b-2 

if a >= 1: 
    print('*'*b) 
if a > 1: 
    for i in range(d): 
     print('*',end='') 
     for i in range(r): 
      print(' ',end='') 
     print('*') 
    print('*'*b,end='') 

Das Ergebnis ist:
The following result is for the height: 6 and width:15

Verwandte Themen