在 Java 中打印一个星号矩形



以下是打印完全由星号 (*( 组成的矩形的源代码,还包括一个测试类。

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

在它说要填写方法主体的片段中,我被指示使用 for 循环来打印星号。我想我对如何做printSegment((方法有一个基本的想法:

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

但是从那里开始,我不确定在printRectangle方法中该做什么。从代码中的注释来看,我认为我应该在调用 printSegment 方法的 printRectangle 方法中编写一个 for 循环,除了我认为你不能在另一个方法的主体中调用 void 方法。对此的任何帮助将不胜感激。

更新:

我尝试在printRectangle((的主体中使用以下代码

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

运行代码并输入高度和宽度后,我收到了以下输出:

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

现在我至少可以打印出星号,所以我只需要知道如何修改代码,使输出是一个矩形的星号块。

更新 #2。

我想出了解决方案。这是让我得到我想要的结果的代码。

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

差异:我在 printSegment(( 方法的主体中添加了一个嵌套的 for 循环,而不是使用 System.out.println("*"); ,在最内层循环中使用System.out.print("*"),在外循环中使用System.out.println(),这导致 5 x 7 输入的以下输出:

Printing a 5 x 7 rectangle:
*****
*****
*****
*****
*****
*****
*****
听起来确实

像你应该在printRectangle中循环,在那里你调用printSegment高度量时间。

若要在内部调用 printSegment 方法printRectangle只需编写printSegment();即可调用它。

由于它在同一类中,因此您只需调用它即可。如果它是从另一个类调用的,您可以使用r.printRectangle();检查 main 方法调用printRectangle RectanglePrinterTest rRectanglePrinter类的实例。

由于它是一个 void 方法,它不会返回任何内容,因此您无需执行任何其他操作。 :)

所以总而言之,你走在正确的轨道上!继续前进,尝试你认为正确的事情,你一定会弄清楚的。

您需要使用 "" 字符串打印新行。每次完成宽度或行命令时,它都应打印""。

使用您的代码片段,我现在可以成功水平打印矩形。

赫尔辛基CS MOOC(http://mooc.cs.helsinki.fi/(在其学习Java课程中介绍了这项任务。

public class MoreStars {
    public static void main(String[] args) {    
        printRectangle(10, 6);
    }
    public static void printRectangle(int width, int height) {
        int i;
        int j;
        for ( i = 0; i < height; i++ ) {
            for ( j = 0; j < width; j++) {
                printStars(width);
            }
            System.out.println("");
        }                
    }
    public static void printStars(int amount) {   
        System.out.print(" * ");
    }
}

相关内容

  • 没有找到相关文章

最新更新