使用递归在Java中以正确格式打印菱形图案
我的程序从文件中读入值,并使用递归方法根据这些值打印星号图案。我只是在把所有东西都排好方面遇到了问题 输出应该如下所示:使用递归在Java中以正确格式打印菱形图案,java,recursion,formatting,Java,Recursion,Formatting,我的程序从文件中读入值,并使用递归方法根据这些值打印星号图案。我只是在把所有东西都排好方面遇到了问题 输出应该如下所示: * * * * * * * * * * * * * * * * * * 关于输出的格式,说明如下: “请注意,图案围绕中心线对称(垂直)对齐。图案也应在每一条线上对称(水平)对齐-提示:使用“线”值来帮助留出空间。” 但我的输出如下所示: * * * * * * * * *
*
* *
* * *
* *
*
*
* *
* * *
* *
*
关于输出的格式,说明如下:
“请注意,图案围绕中心线对称(垂直)对齐。图案也应在每一条线上对称(水平)对齐-提示:使用“线”值来帮助留出空间。”
但我的输出如下所示:
*
* *
* * *
* *
*
*
* *
* * *
* *
*
我用来获取此模式的代码:
public static void makePattern(int thisRow, int num) {
if(thisRow >= num) {
for(int i = 0; i < num; i++) {
System.out.print(" " + "*" + " ");
}
System.out.println();
}
else {
for(int i = 0; i < thisRow; i++) {
System.out.print(" " + "*" + " ");
}
System.out.println();
makePattern(thisRow + 1, num);
for(int i = 0; i < thisRow; i++) {
System.out.print(" " + "*" + " ");
}
System.out.println();
}
}
import java.util.Scanner;
import java.io.*;
public class Program3 {
public static void main(String[] args) throws Exception {
int num = 0;
int thisRow = 1;
java.io.File file = new java.io.File("../instr/prog3.dat");
Scanner fin = new Scanner(file);
while(fin.hasNext()) {
num = fin.nextInt();
if(num >=0 && num <= 25)
makePattern(thisRow, num);
System.out.println();
}
fin.close();
}
publicstaticvoidmakepattern(intthisrow,intnum){
如果(此行>=num){
for(int i=0;i
也是我的主要方法:
public static void makePattern(int thisRow, int num) {
if(thisRow >= num) {
for(int i = 0; i < num; i++) {
System.out.print(" " + "*" + " ");
}
System.out.println();
}
else {
for(int i = 0; i < thisRow; i++) {
System.out.print(" " + "*" + " ");
}
System.out.println();
makePattern(thisRow + 1, num);
for(int i = 0; i < thisRow; i++) {
System.out.print(" " + "*" + " ");
}
System.out.println();
}
}
import java.util.Scanner;
import java.io.*;
public class Program3 {
public static void main(String[] args) throws Exception {
int num = 0;
int thisRow = 1;
java.io.File file = new java.io.File("../instr/prog3.dat");
Scanner fin = new Scanner(file);
while(fin.hasNext()) {
num = fin.nextInt();
if(num >=0 && num <= 25)
makePattern(thisRow, num);
System.out.println();
}
fin.close();
}
import java.util.Scanner;
导入java.io.*;
公共课程3{
公共静态void main(字符串[]args)引发异常{
int num=0;
int thisRow=1;
java.io.File File=new java.io.File(“../instr/prog3.dat”);
扫描仪fin=新扫描仪(文件);
while(fin.hasNext()){
num=fin.nextInt();
如果(num>=0&&num,让我们先分析输出!!
第一步是分析输出
结论:
- 每行上的字符总数始终为n(=3)
- 空间数具有以下模式:
第1行3-1空格
第二行3-2空格
第三行3-3个空格
第四行4-3个空格
第五行5-3个空格
所以
- 递归应在第6行结束,即当前行号为n*2
因此递归方法中的返回条件应该是
if(thisRow == num * 2)
return;
最后一个代码:把PEICE放在一起
当我们把PEICE放在一起时,我们得到:
public static void makePattern(int thisRow, int num) {
//the termination condition
if(thisRow == num * 2)
return;
//the number of spaces
int numberOfSpaces = 0;
if(num < thisRow) {
numberOfSpaces = thisRow - num;
} else {
numberOfSpaces = num - thisRow;
}
//the number of stars
int numberOfStars = num - numberOfSpaces;
//compose the string before printing it
StringBuffer outputBuffer = new StringBuffer(num);
for (int i = 0; i < numberOfSpaces; i++){
outputBuffer.append(" ");
}
for (int i = 0; i < numberOfStars; i++){
outputBuffer.append("* ");
}
//print the string
System.out.println(outputBuffer.toString());
//recursion
makePattern(thisRow + 1, num);
}
publicstaticvoidmakepattern(intthisrow,intnum){
//终止条件
如果(thisRow==num*2)
回来
//空间数
int numberOfSpaces=0;
如果(num<此行){
numberOfSpaces=thisRow-num;
}否则{
numberOfSpaces=num-此行;
}
//星星的数目
int numberOfStars=num-numberOfSpaces;
//在打印之前先合成字符串
StringBuffer outputBuffer=新的StringBuffer(num);
for(int i=0;i
让我们先分析输出!!
第一步是分析输出
结论:
- 每行上的字符总数始终为n(=3)
- 空间数具有以下模式:
第1行3-1空格
第二行3-2空格
第三行3-3个空格
第四行4-3个空格
第五行5-3个空格
所以
- 递归应在第6行结束,即当前行号为n*2
因此递归方法中的返回条件应该是
if(thisRow == num * 2)
return;
最后一个代码:把PEICE放在一起
当我们把PEICE放在一起时,我们得到:
public static void makePattern(int thisRow, int num) {
//the termination condition
if(thisRow == num * 2)
return;
//the number of spaces
int numberOfSpaces = 0;
if(num < thisRow) {
numberOfSpaces = thisRow - num;
} else {
numberOfSpaces = num - thisRow;
}
//the number of stars
int numberOfStars = num - numberOfSpaces;
//compose the string before printing it
StringBuffer outputBuffer = new StringBuffer(num);
for (int i = 0; i < numberOfSpaces; i++){
outputBuffer.append(" ");
}
for (int i = 0; i < numberOfStars; i++){
outputBuffer.append("* ");
}
//print the string
System.out.println(outputBuffer.toString());
//recursion
makePattern(thisRow + 1, num);
}
publicstaticvoidmakepattern(intthisrow,intnum){
//终止条件
如果(thisRow==num*2)
回来
//空间数
int numberOfSpaces=0;
如果(num<此行){
numberOfSpaces=thisRow-num;
}否则{
numberOfSpaces=num-此行;
}
//星星的数目
int numberOfStars=num-numberOfSpaces;
//在打印之前先合成字符串
StringBuffer outputBuffer=新的StringBuffer(num);
for(int i=0;i
这是使用递归技术打印菱形图案的代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class patternRecursion {
static int n,k;
public static void main(String[] args) throws IOException{
try(Scanner s = new Scanner(System.in)){
n=Integer.parseInt(reader.readLine());
k=n-1;
printPattern(n);
}
}
public static void printChar(int m,char c){
if(m==0) return;
try{
printChar(m-1,c);
System.out.print(c);
}catch(StackOverflowError s){return;}
}
public static void printPattern(int m){
if(m==0){
return ;
}else{
printChar(m-1,' ');
printChar(n-m,'#');
printChar(n-m+1,'#');
System.out.println();
printPattern(m-1);
printChar(m,' ');
printChar(k-m,'#');
printChar(k-m+1,'#');
System.out.println();
}
}
}这是使用递归技术打印菱形图案的代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class patternRecursion {
static int n,k;
public static void main(String[] args) throws IOException{
try(Scanner s = new Scanner(System.in)){
n=Integer.parseInt(reader.readLine());
k=n-1;
printPattern(n);
}
}
public static void printChar(int m,char c){
if(m==0) return;
try{
printChar(m-1,c);
System.out.print(c);
}catch(StackOverflowError s){return;}
}
public static void printPattern(int m){
if(m==0){
return ;
}else{
printChar(m-1,' ');
printChar(n-m,'#');
printChar(n-m+1,'#');
System.out.println();
printPattern(m-1);
printChar(m,' ');
printChar(k-m,'#');
printChar(k-m+1,'#');
System.out.println();
}
}
}能否显示主(字符串[])
method?是的,我在原始问题中添加了它。首先,始终关闭外部资源。其次;为什么,如果您正在读取文件,您会System.out.print
请求数据?最后,文件如何解释您想要菱形而不是三角形?文件中是否指定了空格?哦,您是对的,我很复杂我忘了关闭文件,谢谢你提醒我。出于某种原因,我认为我们的教授说我们需要提示输入,我错了,实际上已经删除了代码的那部分。我将在一秒钟内更新,因为我也改变了while循环的一点点。文件并没有真正解释它,钻石只是一个PAR。因为我们教授喜欢做电动汽车,所以他没有遵守他的指示