![](/img/trans.png)
[英]How do I rotate, indent and draw a triangle in java to print a trapezium?
[英]How do I correctly print this triangle of characters?
此代码要求用户提供三角形高度和字母。
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
如何在上述三角形图案中给定字母之后打印字母中的字母?
让我们谈谈您的变量c
,它是一个char
。 (实际上, c
是一个Character
,等效于char
的盒装形式,但这并不重要。)
在Java中, char
是数字类型 。 所有char
都是数字。 例如, char
常量'a'
实际上是数字97:
'a' == 97; // true
您可以使用char
进行算术,就像使用常规数字一样:
'a' + 1; // 98
'a' + 2; // 99
'a' + 3; // 100
Java中字符'a'
和数字“ 97 'a'
之间的映射遵循通用标准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
,如果你需要处理,才应使用装箱和拆箱 (例如,你想定义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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.