如何用Java绘制ASCII楼梯?
我一直在努力用Java完成这项工作。这是一件复杂的事情,至少对我来说 Q1编写一个简单的Java程序,打印楼梯或图形,如下所示:如何用Java绘制ASCII楼梯?,java,for-loop,ascii,draw,ascii-art,Java,For Loop,Ascii,Draw,Ascii Art,我一直在努力用Java完成这项工作。这是一件复杂的事情,至少对我来说 Q1编写一个简单的Java程序,打印楼梯或图形,如下所示: +---+ | | +---+---+ | | | +---+---+---+ | | | | +---+---+---+---+ | | | | | +---+---+
+---+
| |
+---+---+
| | |
+---+---+---+
| | | |
+---+---+---+---+
| | | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
我已经想出了一个解决办法,但还不到一半。这就是我想出的代码
公共类楼梯{
公共静态最终内部高度=5;
公共静态最终整数总高度=高度*5;
公共静态void main(字符串[]args){
//主外环
对于(int i=1;i公共级楼梯{
//您可以将高度更改为任意数字并进行检查
公共静态最终内部高度=5;
公共静态void main(字符串[]args){
楼梯=新楼梯();
对于(int j=0;j 对于(int k=0;k这是我对这个问题的解决方案。谢谢你的拼图;)
公共级楼梯{
公共静态最终整数大小=5;
公共静态最终内部楼梯宽度=5;
公共静态最终字符串踏步=“-”;
公共静态最终管柱提升管=“|”;
公共静态最终字符串NOSING=“+”;
公共静态最终字符串为空=”;
公共静态void main(字符串[]args)
{
StringBuilder步骤=新建StringBuilder();
对于(inti=0;i<(楼梯宽度-2);+i){step.append(踏板);}
StringBuilder hollow=新的StringBuilder();
对于(inti=0;i<(楼梯宽度-2);++i{hollow.append(hollow);}
StringBuilder踏板=新StringBuilder();
对于(inti=0;i
还有另一个答案,因此您可以看到解决此问题的多种方法。此方法使用单个绘制循环,并避免使用常量:
public static void drawStaircase(int steps,
String stepTop, String stepLeft, String stepEmpty) {
String endOfTopStep = stepTop.substring(0,1); // "+---" => "+"
String endOfMidStep = stepLeft.substring(0,1); // "|---" => "|"
for (int row=0; row<steps;row++) {
// paint a top-of-step row
for (int col=0; col<steps; col++) {
boolean isEmpty = row+col+1 < steps;
System.out.print(isEmpty ? stepEmpty : stepTop);
}
System.out.println(endOfTopStep);
// paint a middle-of-step row
for (int col=0; col<steps; col++) {
boolean isEmpty = row+col+1 < steps;
System.out.print(isEmpty ? stepEmpty : stepLeft);
}
System.out.println(endOfMidStep);
}
// paint bottom border
for (int col=0; col<steps; col++) {
System.out.print(stepTop);
}
System.out.println(endOfTopStep);
}
public static void main(String ...args) {
drawStaircase(4, "+---", "| ", " ");
}
公共静态楼梯(内部台阶,
字符串stepTop、字符串stepLeft、字符串stepEmpty){
字符串endOfTopStep=stepTop.substring(0,1);/“+--”=>“+”
字符串endOfMidStep=stepLeft.substring(0,1);/“|--”=>“|”
对于(int row=0;row,我创建了这段代码来说明如何处理一个问题,并将其一步一步地分解,直到可以解决每一步为止
以下是我的众多测试结果之一的结果
+---+
| |
+---+---+
| | |
+---+---+---+
| | | |
+---+---+---+---+
| | | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
我做的第一件事是创建一个生成空白线段的方法。我使用该类使构建线段和连接线段变得更容易
一旦我开始工作,我就创建了创建台阶(平台)和托梁的方法
接下来,我创建了一个方法来创建一行输出
最后,我创建了一个方法来创建整个楼梯
这是完整的可运行代码。它可能不是最有效的代码,但我希望它是最容易理解的代码之一
public class Staircase {
public static void main(String[] args) {
Staircase sc = new Staircase();
System.out.println(sc.createStaircase(5));
}
public String createStaircase(int steps) {
StringBuilder builder = new StringBuilder();
int blankSteps = 0;
String step = createStepSegment();
String joist = createJoistSegment();
for (int i = 1; i <= steps; i++) {
blankSteps = Math.max(0, steps - i);
builder.append(createLine(step, steps, blankSteps));
builder.append(createLine(joist, steps, blankSteps));
}
builder.append(createLine(step, steps, blankSteps));
return builder.toString();
}
private StringBuilder createLine(String string, int steps, int blankSteps) {
StringBuilder builder = new StringBuilder();
int width = string.length() * blankSteps;
builder.append(createBlankSegment(width));
int boxSteps = steps - blankSteps;
for (int i = 0; i < boxSteps; i++) {
builder.append(string);
}
builder.append(string.charAt(0));
builder.append(System.lineSeparator());
return builder;
}
private String createStepSegment() {
return "+---";
}
private String createJoistSegment() {
return "| ";
}
private StringBuilder createBlankSegment(int length) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append(" ");
}
return builder;
}
}
公共级楼梯{
公共静态void main(字符串[]args){
楼梯sc=新楼梯();
系统输出打印LN(sc.5);
}
公共字符串(整数步){
StringBuilder=新的StringBuilder();
int blankSteps=0;
字符串步骤=createStepSegment();
弦托梁=createJoistSegment();
对于(int i=1;i您可以使用streams
建造楼梯:
intm=5;
字符串[]arr=IntStream.range(0,m).mapToObj(i->{
字符串[]arr1=新字符串[m];
字符串[]arr2=新字符串[m];
字符串[]arr3=新字符串[m];
IntStream.range(0,m).forEach(j->{
如果(i+j>=m-1){
如果(j==m-1){
arr1[j]=“+--+”;
arr2[j]=“||”;
arr3[j]=“+--+”;
}否则{
arr1[j]=“+--”;
arr2[j]=“|”;
arr3[j]=“+--”;
}
}否则{
arr1[j]=“”;
arr2[j]=“”;
}
});
如果(i==m-1){
返回流。of(arr1、arr2、arr3);
}否则{
返回流。of(arr1,arr2);
}
}).flatMap(函数.identity())
.map(行->字符串.join(“,行))
.toArray(字符串[]::新建);
//输出
Arrays.stream(arr.forEach)(System.out::println);
可以将楼梯表示为0和1的二维数组,如下所示:
[0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 1, 1]
[0, 0, 0, 1, 1, 1]
[0, 0, 1, 1, 1, 1]
[0, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
然后,您可以将此数组的非空单元格表示为几乎正方形,由两行组成:一行带上边框,一行带左边框。空单元格只是两行长度相同的空格
+---
|
然后,您可以将每行的单元格连接成一行,并逐行输出。结果由两部分组成:具有右边框的二维数组的行和具有下边框的行:
int n=6;
//二维零和一数组
int[][]字段=IntStream.range(0,n)
.mapToObj(i->IntStream.range(0,n)
.map(j->i+jpublic class Staircase {
public static void main(String[] args) {
Staircase sc = new Staircase();
System.out.println(sc.createStaircase(5));
}
public String createStaircase(int steps) {
StringBuilder builder = new StringBuilder();
int blankSteps = 0;
String step = createStepSegment();
String joist = createJoistSegment();
for (int i = 1; i <= steps; i++) {
blankSteps = Math.max(0, steps - i);
builder.append(createLine(step, steps, blankSteps));
builder.append(createLine(joist, steps, blankSteps));
}
builder.append(createLine(step, steps, blankSteps));
return builder.toString();
}
private StringBuilder createLine(String string, int steps, int blankSteps) {
StringBuilder builder = new StringBuilder();
int width = string.length() * blankSteps;
builder.append(createBlankSegment(width));
int boxSteps = steps - blankSteps;
for (int i = 0; i < boxSteps; i++) {
builder.append(string);
}
builder.append(string.charAt(0));
builder.append(System.lineSeparator());
return builder;
}
private String createStepSegment() {
return "+---";
}
private String createJoistSegment() {
return "| ";
}
private StringBuilder createBlankSegment(int length) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append(" ");
}
return builder;
}
}
+---+
| |
+---+---+
| | |
+---+---+---+
| | | |
+---+---+---+---+
| | | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
[0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 1, 1]
[0, 0, 0, 1, 1, 1]
[0, 0, 1, 1, 1, 1]
[0, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
+---
|
n=6
+---+
| |
+---+---+
| | |
+---+---+---+
| | | |
+---+---+---+---+
| | | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+