Java 如何水平打印?

Java 如何水平打印?,java,recursion,Java,Recursion,嘿,伙计们,如果你用给定的输入运行这个代码,你会得到一个垂直标尺 我正在尝试使用给定的递归函数得到一个水平标尺,知道如何得到它或提示吗 public class Ruler { // draw a tick with no label public static void drawOneTick(int tickLength) { drawOneTick(tickLength, -1); } // draw one tick publ

嘿,伙计们,如果你用给定的输入运行这个代码,你会得到一个垂直标尺 我正在尝试使用给定的递归函数得到一个水平标尺,知道如何得到它或提示吗

public class Ruler {
    // draw a tick with no label 
    public static void drawOneTick(int tickLength) {
        drawOneTick(tickLength, -1);
    }

    // draw one tick 
    public static void drawOneTick(int tickLength, int tickLabel) {
        for (int i = 0; i < tickLength; i++)
            System.out.print("-");
        if (tickLabel >= 0)
            System.out.print(" " + tickLabel);
        System.out.print("\n");
    }

    public static void drawTicks(int tickLength) {
        if (tickLength > 0) {
            drawTicks(tickLength-1);
            drawOneTick(tickLength);
            drawTicks(tickLength-1);
        }
    }

    public static void drawRuler(int nInches, int majorLength) {
        drawOneTick(majorLength, 0);
        for (int i = 1; i <= nInches; i++) {
            drawTicks(majorLength-1);
            drawOneTick(majorLength, i);
        }
    }

    public static void main(String[] args) {
        drawRuler(3,4);
    }
}
公共类标尺{
//画一个没有标签的记号
公共静态无效drawOneTick(int tickLength){
drawOneTick(tickLength,-1);
}
//划勾
公共静态无效drawOneTick(int tickLength,int tickLabel){
for(int i=0;i=0)
系统输出打印(“+标签);
系统输出打印(“\n”);
}
公共静态空白抽签(int tickLength){
如果(滴答声长度>0){
抽签(滴答声长度-1);
drawOneTick(滴答声长度);
抽签(滴答声长度-1);
}
}
公共静态虚空绘图尺(int-nInches,int-majorLength){
drawOneTick(主长度,0);

对于(int i=1;i假设你想这样做:

0               1               2               3               4               5               
|               |               |               |               |               |               
|       |       |       |       |       |       |       |       |       |       |       
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
这将很难通过递归方法实现,因为您限制了print/println(),而且文本是1D^^ 所以你不能用1种方法画出整个“勾线”,不,高度为N的勾线将取N+1条打印线。 但是,正如你所看到的,我已经实现了这把尺子,只有环:

斯波勒!
package.com公司;
公共班机{
专用静态字符串标签(整数计数、整数偏移){
StringBuilder sb=新的StringBuilder();

对于(int i=0;i假设你想这样做:

0               1               2               3               4               5               
|               |               |               |               |               |               
|       |       |       |       |       |       |       |       |       |       |       
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
这将很难通过递归方法实现,因为您限制了print/println(),而且文本是1D^^ 所以你不能用1种方法画出整个“勾线”,不,高度为N的勾线将取N+1条打印线。 但是,正如你所看到的,我已经实现了这把尺子,只有环:

斯波勒!
package.com公司;
公共班机{
专用静态字符串标签(整数计数、整数偏移){
StringBuilder sb=新的StringBuilder();

对于(int i=0;i,这里有一个更符合您的示例的解决方案。您仍然可以使用递归来实现,而不必使用幂函数来计算记号的位置

我建议从一个较小的问题开始:如何在主刻度之间绘制小刻度。我们可以使用递归进行此操作。我们还必须意识到,我们不能再一次打印整个刻度(正如Fen1kz正确提到的)因为它跨越多行。我们将不得不在行数上循环,并在tick函数中根据我们正在绘制的行绘制一个tick或一个空白。一旦我们绘制了这一点,我们就可以很容易地绘制一组小tick。在这之后,添加其余代码以重复前面的代码并添加主tick并不难美国

为了完整起见,以下是完整的代码:

    public class Ruler {
    private static void drawMinorTicks(int line, int ticks) {
        if (ticks > 1) {
            drawMinorTicks(line, ticks - 1);
        }
        if (line <= ticks) {
            System.out.print('|');
        } else {
            System.out.print(' ');
        }
        if (ticks > 1) {
            drawMinorTicks(line, ticks - 1);
        }
    }

    private static void drawSingleMajorTick(int line, int ticks, int label) {
        if (line <= ticks) {
            System.out.print('|');
        } else {
            System.out.print(label);
        }
    }

    private static void drawMajorTicks(int inches, int line, int ticks) {
        drawSingleMajorTick(line, ticks, 0);
        for (int i = 1; i <= inches; i++) {
            drawMinorTicks(line, ticks - 1);
            drawSingleMajorTick(line, ticks, i);
        }
    }

    private static void drawRuler(int inches, int ticks) {
        for (int i = 1; i <= ticks + 1; ++i) {
            drawMajorTicks(inches, i, ticks);
            System.out.println();
        }
    }

    public static void main(String[] args) {
        drawRuler(5, 5);
    }
}

这里有一个更符合您的示例的解决方案。您仍然可以使用递归来实现,而不必使用幂函数来计算记号的位置

我建议从一个较小的问题开始:如何在主刻度之间绘制小刻度。我们可以使用递归进行此操作。我们还必须意识到,我们不能再一次打印整个刻度(正如Fen1kz正确提到的)因为它跨越多行。我们将不得不在行数上循环,并在tick函数中根据我们正在绘制的行绘制一个tick或一个空白。一旦我们绘制了这一点,我们就可以很容易地绘制一组小tick。在这之后,添加其余代码以重复前面的代码并添加主tick并不难美国

为了完整起见,以下是完整的代码:

    public class Ruler {
    private static void drawMinorTicks(int line, int ticks) {
        if (ticks > 1) {
            drawMinorTicks(line, ticks - 1);
        }
        if (line <= ticks) {
            System.out.print('|');
        } else {
            System.out.print(' ');
        }
        if (ticks > 1) {
            drawMinorTicks(line, ticks - 1);
        }
    }

    private static void drawSingleMajorTick(int line, int ticks, int label) {
        if (line <= ticks) {
            System.out.print('|');
        } else {
            System.out.print(label);
        }
    }

    private static void drawMajorTicks(int inches, int line, int ticks) {
        drawSingleMajorTick(line, ticks, 0);
        for (int i = 1; i <= inches; i++) {
            drawMinorTicks(line, ticks - 1);
            drawSingleMajorTick(line, ticks, i);
        }
    }

    private static void drawRuler(int inches, int ticks) {
        for (int i = 1; i <= ticks + 1; ++i) {
            drawMajorTicks(inches, i, ticks);
            System.out.println();
        }
    }

    public static void main(String[] args) {
        drawRuler(5, 5);
    }
}

这个问题是从哪里来的?是学校还是学院?而不是
System.out.print(“\n”);
试试
System.out.print(“\t”);
@PM77-1,这也不行:(@sidsmith)我是在网上看到的,我对java不熟悉,只是为了practice@ParthaBenjapi-IMHO,你应该避免这样的问题。你只会学到一个设置输出格式的技巧。如果你想学习递归,那么还有很多其他的问题。网上也有很多问题站点和简单的编码挑战。将这些用于实践tead.祝你好运。这个问题是从哪里来的?是学校还是大学?而不是
System.out.print(“\n”);
试试
System.out.print(“\t”);
@PM77-1也不行:(@sidsmith)我是在网上看到的,我对java不熟悉,只是为了practice@ParthaBenjapi-IMHO,你应该避免这样的问题。你只会学到一个设置输出格式的技巧。如果你想学习递归,那么还有很多其他的问题。网上也有很多问题站点和简单的编码挑战。将这些用于实践这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这把尺子需要在最上面的标记上打印数字。那么你会改变什么?这些数字需要打印在最上面的标记上,那么你会改变什么?