此代码要求用户提供三角形高度和字母。
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
如何在上面显示的三角形图案中给定字母后的字母之后打印字母?
答案 0 :(得分:2)
让我们谈谈变量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'
)增加到中心的字母到打印的距离。待打印信函位于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)));
}
您在这里时,也可以通过代码解决其他一些问题:
在Java中,类的约定以大写字母开头。这意味着您应该更改:
public class triangle
{
收件人:
public class Triangle
{
并将triangle.java
重命名为Triangle.java
。
您不需要在顶部声明变量。最好在初次需要它们时声明它们,以便将声明和初始赋值结合起来。例如,代替:
int size = 0;
// ...
size = kb.nextInt();
您可以简单地写:
int size = kb.nextInt();
这是您的代码,经过重构可以解决此问题:
Scanner kb = new Scanner(System.in);
System.out.println("Enter height of the triangle : ");
int size = kb.nextInt();
System.out.println("Which character you want to use : ");
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();
}
char
应该使用Character
,而不是c
。 Character
仅在需要处理boxing and unboxing(例如,您要定义ArrayList<Character>
)时才使用,这与您当前的问题无关。因此,替换:
Character c = kb.next().charAt(0);
具有:
char c = kb.next().charAt(0);
使用System.out.print()
进行提示。它允许用户在同一行上键入答案。代替:
System.out.println("Enter height of the triangle : ");
int size = kb.nextInt();
System.out.println("Which character you want to use : ");
char c = kb.next().charAt(0);
使用:
System.out.print("Enter height of the triangle: ");
int size = kb.nextInt();
System.out.print("Enter character you want to use: ");
char c = kb.next().charAt(0);