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,你应该避免这样的问题。你只会学到一个设置输出格式的技巧。如果你想学习递归,那么还有很多其他的问题。网上也有很多问题站点和简单的编码挑战。将这些用于实践这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这是一把漂亮的尺子。这把尺子需要在最上面的标记上打印数字。那么你会改变什么?这些数字需要打印在最上面的标记上,那么你会改变什么?