这段代码要求用户输入三角形高度和字母。
import java.util.*;
public class triangle
{
public static void main(String [] args)
{
Scanner kb = new Scanner(System.in);
int size = 0;
Character c;
System.out.println("Enter height of the triangle : ");
size = kb.nextInt();
System.out.println("Which character you want to use : ");
c = kb.next().charAt(0);
int i, j, k;
for (i = 0; i < size + 1; i++)
{
for (j = size; j > i; j--)
{
System.out.print(" ");
}
for (k = 0; k < (2 * i - 1); k++)
{
System.out.print(c);
}
System.out.println();
}
}
}
对于高度为3且字母为b
的情况,电流输出为:
b
bbb
bbbbb
但它应该是:
b
cbc
dcbcd
在上面所示的三角形图案中,如何在给定字母之后打印字母?
发布于 2019-06-05 06:49:40
你的问题
让我们来讨论一下变量c
,它是一个char
。(实际上,c
是一个Character
,盒装的等价物是char
,但这并不重要。)
在Java中,char
is a number type。所有的char
都是数字。例如,char
文字'a'
实际上是数字97:
'a' == 97; // true
您可以使用char
进行算术运算,就像您可以使用常规数字一样:
'a' + 1; // 98
'a' + 2; // 99
'a' + 3; // 100
在Java语言中,像'a'
这样的字符和像97这样的数字之间的映射遵循通用标准Unicode,它是旧标准ASCII的超集。换句话说,'a' == 97
是因为ASCII码这么说的。这是一个ASCII表:
ASCII和Java的char
都经过了精心的设计,以便对字符进行算术运算完全符合您的期望。研究这些示例:
(char) ('a' + 1); // 'b'
(char) ('a' + 2); // 'c'
(char) ('a' + 3); // 'd'
如您所见,在最后一行中,将3与'a'
相加,然后将其转换回char
,生成的'd'
是'a'
之后的3个字母。
所以,如果你想在某个字符c
后面加上x个字母,代码就是(char) (c + x)
。
在您的示例中,对于您在三角形中打印的每个字母,您希望将用户的字符(在您的示例中为'b'
)增加letter to print与中心字母的距离。待打印的字母位于位置k
,中间的字母始终位于位置i - 1
;因此距离为Math.abs(k - (i - 1))
或Math.abs(k - i + 1)
。这就是要添加到角色中的量。
有了这些知识,修复代码就很简单了。替换:
for (k = 0; k < (2 * i - 1); k++)
{
System.out.print(c);
}
通过以下方式:
for (k = 0; k < (2 * i - 1); k++)
{
System.out.print((char) (c + Math.abs(k - i + 1)));
}
其他问题
既然你在这里,你也可以用你的代码修复一些其他的问题:
公共类三角形{
至:
公共类三角{
并将Triangle.java
.
triangle.java
,不需要在顶部声明变量。最好在第一次需要它们的时候声明它们,这样就可以将声明和初始赋值结合起来。例如,而不是:int size = 0;// ...大小= kb.nextInt();
你可以简单地写下:
int size = kb.nextInt();
以下是您的代码,已重构以修复此问题:
扫描仪kb =新扫描仪(System.in);System.out.println(“输入三角形高度:");int size = kb.nextInt();System.out.println(”您要使用的字符:");character c= kb.next().charAt(0);for (int i= 0;i< size + 1;i++) { for (int j= size;j> i;j--) { System.out.print(“");} for (int k= 0;k< (2 *i- 1);k++) { System.out.print((char) (c + Math.abs(k -i+1);} System.out.println();}
c
,您应该使用char
,而不是Character
。只有当你需要处理boxing and unboxing (例如,你想定义一个ArrayList<Character>
)时才应该使用Character
,这与你当前的问题没有任何关系。因此,请替换:字符c= kb.next().charAt(0);
通过以下方式:
char c= kb.next().charAt(0);
System.out.print()
用于提示。它允许用户在同一行中键入答案。而不是:System.out.println(“输入三角形高度:");int size = kb.nextInt();System.out.println(”要使用的字符:");char c= kb.next().charAt(0);
使用:
System.out.print(“输入三角形的高度:");int size = kb.nextInt();System.out.print(”输入要使用的字符:");char c=int
https://stackoverflow.com/questions/56451238
复制相似问题