Drucken Sie ein Rechteck aus Sternchen in Java
Folgendes ist der source-code zu drucken, ein Rechteck vollständig aus Sternchen (*), mit einer test-Klasse mit eingeschlossen.
import javax.swing.JOptionPane ;
/**
* A class to print block rectangles.
*/
class RectanglePrinter
{
//instance var's
int height ; //height of rectangle (i.e. number of segments)
int width ; //width of each segment(i.e. number of "*"s printed)
/**
* Create a RectanglePrinter object.
* @param height height of rectangle (i.e., number of lines to print)
* @param width width of rectangle (i.e., number of '*'s per line
*/
public RectanglePrinter(int height, int width) //constructor
{
this.height = height ;
this.width = width ;
}
/**
* Prints one line of a rectangle, by printing exactly "width" asterisks
*/
public void printSegment()
{
//write the body of this method here
}
/**
* Prints a rectangle exactly "height" lines in height. Each line is
* printed via a call to method printSegment
*/
public void printRectangle()
{
System.out.println("Printing a " + height + " x " + width + " rectangle:") ;
//write the body of this method here
}
} //end of class rectanglePrinter definition
public class RectanglePrinterTest
{
public static void main (String [] args)
{
String input = JOptionPane.showInputDialog
("What is the height of the rectangle?") ;
int height = Integer.parseInt(input) ;
input = JOptionPane.showInputDialog
("What is the width of the rectangle?") ;
int width = Integer.parseInt(input) ;
RectanglePrinter r = new RectanglePrinter(height, width) ;
System.out.println() ;
r.printRectangle() ;
System.out.println() ;
}
}
In den Segmenten, in denen es heißt, füllen Sie das Methode Körper, ich wurde angewiesen, zu verwenden für Schleifen zur Ausgabe der Sternchen. Ich glaube, ich habe eine grundlegende Idee, wie das zu tun ist das printSegment () - Methode:
for (int w = 1; w <= width; w++)
{
System.out.println("*");
}
Aber von dort aus, bin ich unsicher, was zu tun innerhalb der printRectangle Methode. Ausgehend von den Kommentaren in den code, denke ich, ich sollte schreiben Sie eine for-Schleife in der printRectangle-Methode, ruft die printSegment Methode, außer ich glaube nicht, können Sie rufen Sie eine void-Methode in den Körper einer anderen Methode. Jede Hilfe auf diesem würde sehr geschätzt werden.
Update:
Ich habe versucht, verwenden Sie den folgenden code innerhalb des Körpers der printRectangle()
for (int h = 1; h <= height; h++)
{
printSegment();
}
Nachdem die Ausführung des Codes und der Eingabe der Höhe und Breite, erhielt ich die folgende Ausgabe:
Printing a 6 x 7 rectangle:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Nun kann ich drucken Sie das Sternchen zumindest, so brauche ich nur zu wissen, wie Sie den code ändern, damit die Ausgabe ist ein Rechteckiger block von Sternchen.
Update #2.
Dachte ich, die Lösung. Hier ist der code, hab mir die Ergebnisse, die ich suchte.
import javax.swing.JOptionPane ;
/**
* A class to print block rectangles.
*/
class RectanglePrinter
{
//instance var's
int height ; //height of rectangle (i.e. number of segments)
int width ; //width of each segment(i.e. number of "*"s printed)
/**
* Create a RectanglePrinter object.
* @param height height of rectangle (i.e., number of lines to print)
* @param width width of rectangle (i.e., number of '*'s per line
*/
public RectanglePrinter(int height, int width) //constructor
{
this.height = height ;
this.width = width ;
}
/**
* Prints one line of a rectangle, by printing exactly "width" asterisks
*/
public void printSegment()
{
//write the body of this method here
for (int w = 1; w <= width; w++)
{
for (int h = 1; h <= height; h++)
{
System.out.print("*");
}
System.out.println();
}
}
/**
* Prints a rectangle exactly "height" lines in height. Each line is
* printed via a call to method printSegment
*/
public void printRectangle()
{
System.out.println("Printing a " + height + " x " + width + " rectangle:") ;
//write the body of this method here
printSegment();
}
} //end of class rectanglePrinter definition
public class RectanglePrinterTest
{
public static void main (String [] args)
{
String input = JOptionPane.showInputDialog
("What is the height of the rectangle?") ;
int height = Integer.parseInt(input) ;
input = JOptionPane.showInputDialog
("What is the width of the rectangle?") ;
int width = Integer.parseInt(input) ;
RectanglePrinter r = new RectanglePrinter(height, width) ;
System.out.println() ;
r.printRectangle() ;
System.out.println() ;
}
}
Unterschiede gemacht: ich habe eine verschachtelte for-Schleife in den Körper des printSegment () - Methode, und statt der Verwendung
System.out.println("*");
verwendet System.out.print("*")
in der innersten Schleife, und System.out.println()
in der äußeren Schleife, die Folge in der folgende Ausgabe für die Eingabe von 5 x 7:
Printing a 5 x 7 rectangle:
*****
*****
*****
*****
*****
*****
*****
- "Ich glaube nicht, können Sie rufen Sie eine void-Methode in den Körper einer anderen Methode". Was Sie denken, ist falsch.
- Rufen Sie ein
void
Methode innerhalb einer anderen Methode. Gehen Sie voran und versuchen zu tun, was Sie denken, Sie sollten. Du bist auf dem richtigen Weg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist in der Tat klingen wie Sie sollen, machen eine Schleife in
printRectangle
wo Sie anrufenprintSegment
für die Höhe, Betrag mal.Ihren Anruf
printSegment
Methode innerhalbprintRectangle
einfach schreibenprintSegment();
zu nennen.Seit seiner in der gleichen Klasse das ist alles was Sie tun müssen, um es aufzurufen. Wenn Sie aufgerufen wurden, die von einer anderen Klasse können Sie überprüfen, wie
RectanglePrinterTest
main-Methode AufrufeprintRectangle
mitr.printRectangle();
wor
ist eine Instanz derRectanglePrinter
Klasse.Als ein void-Methode ist es nicht etwas zurückkehren, so brauchen Sie nicht, etwas anderes zu tun. 🙂
Also um es zusammenzufassen: Sie sind auf dem richtigen Weg! Halten zu gehen und Versuch einfach, was Sie denken, fühlt sich richtig an und Sie werden sicherlich herausfinden.
Müssen Sie die "\n" " string zu drucken eine neue Zeile. Es soll print "\n" jedes mal, wenn sich die Breite oder die Zeile Befehl abgeschlossen ist.
Mit Stücken aus Ihrem code kann ich nun erfolgreich print ein Rechteck, horizontal.
Helsinki CS MOOC (http://mooc.cs.helsinki.fi/) präsentiert sich dieser Aufgabe in seiner Java lernen natürlich.