L'impression d'un rectangle d'astérisques en Java

Voici le code source pour imprimer un rectangle entièrement composé d'astérisques (*), avec une classe de test inclus en tant que bien.

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() ;
}
}

Dans les segments où il est dit de remplir le corps de la méthode, j'ai été invité à utiliser pour les boucles d'imprimer la forme d'astérisques. Je pense avoir une idée de base de la façon de faire la printSegment() méthode:

for (int w = 1; w <= width; w++)
{
System.out.println("*");
}

Mais à partir de là, je ne suis pas sûr de quoi faire dans le printRectangle méthode. À en juger par les commentaires dans le code, je pense que je suis censé écrire une boucle for dans le printRectangle méthode qui appelle la printSegment méthode, sauf que je ne pense pas que vous pouvez appeler une méthode void dans le corps d'une autre méthode. Toute aide serait grandement appréciée.

Mise à jour:

J'ai tenté d'utiliser le code suivant dans le corps de printRectangle()

for (int h = 1; h <= height; h++)
{
printSegment();
}

Après l'exécution du code et de la saisie de la hauteur et la largeur, j'ai reçu la sortie suivante:

Printing a 6 x 7 rectangle:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Maintenant, je peux imprimer les astérisques au moins, alors j'ai juste besoin de savoir comment modifier le code afin que la sortie est un bloc rectangulaire d'astérisques.

Mise à jour #2.

J'ai trouvé la solution. Voici le code qui m'a obtenu le résultat que je cherchais.

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() ;
}
}

Les différences apportées: j'ai ajouté un imbriqués pour la boucle dans le corps de la printSegment() la méthode, et au lieu d'utiliser
System.out.println("*"); , utilisé System.out.print("*") au plus profond de la boucle, et System.out.println() dans la boucle externe, ce qui a entraîné la sortie suivante pour la saisie de 5 x 7:

Printing a 5 x 7 rectangle:
*****
*****
*****
*****
*****
*****
*****
  • "Je ne pense pas que vous pouvez appeler une méthode void dans le corps d'une autre méthode". Ce que vous pensez est faux.
  • Vous pouvez faire appel à un void méthode à partir de l'intérieur d'une autre méthode. Aller de l'avant et essayer de faire ce que vous pensez que vous êtes censé le faire. Vous êtes sur la bonne voie.
InformationsquelleAutor 011012 | 2015-11-02