Java中使用嵌套循环的三角形字模式
对于本作业,输入任何单词后,它将以如下所示的模式打印(在本例中,单词为计算机): 目前,我的代码是:Java中使用嵌套循环的三角形字模式,java,algorithm,Java,Algorithm,对于本作业,输入任何单词后,它将以如下所示的模式打印(在本例中,单词为计算机): 目前,我的代码是: String output = ""; for (int a = word.length()-1; a >= 1; a--) { for (int b = 0; b < word.length(); b++) { out.print(" "); }
String output = "";
for (int a = word.length()-1; a >= 1; a--)
{
for (int b = 0; b < word.length(); b++)
{
out.print(" ");
}
out.println(word.charAt(word.length()-1-a));
}
for (int c = 0; c < word.length(); c++)
{
out.print(word.charAt(word.length()-1-c));
}
out.print(word.substring(1));
return output + "\n";
任何建议或提示都将不胜感激,提前谢谢 不要编写适用于每种情况的神奇代码,而是尝试使用适用于每种情况的代码:
String someString = "COMPUTER";
switch(someString.length()) {
case 0: System.out.println();
break;
case 1: System.out.println(someString);
break;
default:
int _spaces_before_after = someString.length()-1;
int _spaces_middle = 0;
for(int i=0; i<someString.length(); i++){
if(i!=someString.length()-1){
if(i==0){
for(int j=0; j<_spaces_before_after; j++)
System.out.print(" ");
System.out.print(someString.charAt(0));
for(int j=0; j<_spaces_before_after; j++)
System.out.print(" ");
System.out.println();
_spaces_middle = 1;
}
else {
for(int j=0; j<_spaces_before_after; j++)
System.out.print(" ");
System.out.print(someString.charAt(i));
for(int j=0; j<_spaces_middle; j++)
System.out.print(" ");
System.out.print(someString.charAt(i));
for(int j=0; j<_spaces_before_after; j++)
System.out.print(" ");
System.out.println();
_spaces_middle+=2;
}
_spaces_before_after-=1;
}
else {
for(int j=someString.length()-1; j>=0; j--)
System.out.print(someString.charAt(j));
for(int j=1; j<someString.length(); j++)
System.out.print(someString.charAt(j));
}
}
break;
}
String someString=“计算机”;
开关(someString.length()){
案例0:System.out.println();
打破
案例1:System.out.println(someString);
打破
违约:
int\u spaces\u before\u after=someString.length()-1;
int _spaces_middle=0;
对于(int i=0;i假设您有一个长度为n
的字符串str
。您将有一个大小为n
×2n+1
的矩阵
首先,您需要定义三角形的中心c
,即位置n
在矩阵的第一行中,仅在中间绘制第一个字母(str[0]
),然后转到下一行
在第二行中,在c-1
和c+1
位置绘制第二个字母(str[1]
)
在第三行中,在c-2
和c+2
位置绘制第三个字母(str[2]
)
等等
最后一行比较棘手。从中心开始,你必须画出整个单词。从中心开始,你开始前后书写字符串
我尝试了一些实现,非常简单:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int n = str.length();
char[][] matrix = new char[n][2*n+1];
char[] chrArr = str.toCharArray();
// initializes the matrix with blank spaces
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2*n+1; j++) {
matrix[i][j] = ' ';
}
}
// build the two sides of the triangle
for (int i = 0; i < n - 1; i++) {
matrix[i][n-i] = chrArr[i];
matrix[i][n+i] = chrArr[i];
}
// last line, build the base of the triangle
for (int i = 0; i < n; i++) {
matrix[n-1][n-i] = chrArr[i];
matrix[n-1][n+i] = chrArr[i];
}
// print
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2*n+1; j++) {
System.out.print(matrix[i][j]);
}
System.out.print("\n");
}
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串str=br.readLine();
int n=str.length();
字符[]矩阵=新字符[n][2*n+1];
char[]chrArr=str.toCharArray();
//用空格初始化矩阵
对于(int i=0;i
这是正在运行的ideone。
您可以尝试任何字符串大小。逻辑很简单,首先尝试使用StringBuilder
的reverse
创建最后一行。然后从第一行打印到最后一行
最后一行
的情况很简单
从第一行
到最后一行-1
,我们只需要打印距离等于0,1,2…到最后一行中心的字符
public void printTriangle(String input) {
String tmp = input.substring(1);//Take the suffix
StringBuilder builder = new StringBuilder(tmp);
builder = builder.reverse().append(input);//Reverse, then append it
String line = builder.toString();//This is the last line
for(int i = 0; i < input.length(); i++){
for(int j = 0; j < line.length(); j++){
//Print the last line, or those that have distance equals i to the center of the last line
if(i + 1 == input.length() || Math.abs(j - line.length()/2) == i){
System.out.print(line.charAt(j));
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
输出
C
O O
M M
P P
U U
T T
E E
RETUPMOCOMPUTER
S
T T
A A
C C
K K
O O
V V
E E
R R
F F
L L
O O
WOLFREVOKCATSTACKOVERFLOW
输入
输出
C
O O
M M
P P
U U
T T
E E
RETUPMOCOMPUTER
S
T T
A A
C C
K K
O O
V V
E E
R R
F F
L L
O O
WOLFREVOKCATSTACKOVERFLOW
您要求使用嵌套循环,但还有其他几种方法,包括使用空格填充。如果允许您这样做,您只需要一个循环:
public static void printTriangle(String str){
int len = str.length()-1, idx = 1;
System.out.println(String.format("%"+(len+1)+"s", str.charAt(0)));
for(int x=0; x<str.length()-2; x++){
System.out.print(String.format("%"+(len--)+"s", str.charAt(idx)));
System.out.println(String.format("%"+(idx*2)+"s", str.charAt(idx++)));
}
System.out.println(new StringBuilder(str.substring(1)).reverse().toString() + str);
}
您需要计算出每行需要插入多少空格。这应该很简单,因为您已经计算出三角形的中间,您所需要做的就是根据打印的字符缩短循环(类似于您已经决定打印的字符)。这样您就可以看到左侧。右侧只是在打印换行之前做相反的操作。@anlam456请看下面我的解决方案。
S
T T
A A
C C
K K
O O
V V
E E
R R
F F
L L
O O
WOLFREVOKCATSTACKOVERFLOW
public static void printTriangle(String str){
int len = str.length()-1, idx = 1;
System.out.println(String.format("%"+(len+1)+"s", str.charAt(0)));
for(int x=0; x<str.length()-2; x++){
System.out.print(String.format("%"+(len--)+"s", str.charAt(idx)));
System.out.println(String.format("%"+(idx*2)+"s", str.charAt(idx++)));
}
System.out.println(new StringBuilder(str.substring(1)).reverse().toString() + str);
}
C
O O
M M
P P
U U
T T
E E
RETUPMOCOMPUTER