在Java中

时间:2015-11-02 21:22:45

标签: java loops for-loop asterisk

以下是打印完全由星号(*)组成的矩形的源代码,同时包含测试类。

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方法中要做什么。从代码中的注释来看,我认为我应该在printRectangle方法中编写一个for循环来调用printSegment方法,除了我认为你不能在另一个方法体内调用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:
*****
*****
*****
*****
*****
*****
*****

3 个答案:

答案 0 :(得分:0)

确实听起来你应该在printRectangle中制作一个循环,在这里你可以调用printSegment高度数量的时间。

要在printSegment内拨打printRectangle方法,只需写下printSegment();即可将其调用。

因为它在同一个班级,所以你需要做的就是调用它。如果是从其他课程调用的,您可以使用RectanglePrinterTest检查printRectangle主方法调用r.printRectangle();的方式,其中rRectanglePrinter类的实例。

作为一种无效方法,它不会返回任何东西,所以你不需要做任何其他事情。 :)

总而言之,你走在正确的轨道上!继续前进,尝试你认为正确的事情,你一定会想出来。

答案 1 :(得分:0)

您需要使用&#34; \ n&#34;用于打印新行的字符串。它应该打印&#34; \ n&#34;每次完成width或row命令。

答案 2 :(得分:0)

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

赫尔辛基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(" * ");
    }
}