Java 如何正确打印此三角形字符?
此代码要求用户输入三角形高度和字母Java 如何正确打印此三角形字符?,java,character,ascii,Java,Character,Ascii,此代码要求用户输入三角形高度和字母 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 t
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();
}
}
}
但它应该是:
b
cbc
dcbcd
如何在上面显示的三角形图案中,在给定字母后打印字母表中的字母?您的问题
让我们讨论一下变量c
,它是一个char
。(实际上,c
是a,装箱后相当于char
,但这并不重要。)
在Java中。所有字符都是数字。例如,char
literal'a'
实际上是数字97:
'a'==97;//真的
您可以使用char
进行算术运算,就像使用常规数字一样:
'a'+1;//98
“a”+2;//99
“a”+3;//100
Java中像'a'
这样的字符和像97这样的数字之间的映射遵循通用标准,这是旧标准的超集。换句话说,'a'==97
,因为ASCII是这么说的。这是一个ASCII表:
ASCII和Java的char
都经过了深思熟虑的设计,因此使用字符进行算术运算的效果与您预期的完全一样。研究这些例子:
(char)('a'+1);/'b'
(char)('a'+2);/'c'
(char)('a'+3);/'d'
如您所见,在最后一行中,将3添加到'a'
,然后将其转换回字符
将生成'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++)
{
系统输出打印(c);
}
与:
for(k=0;k<(2*i-1);k++)
{
系统输出打印((char)(c+Math.abs(k-i+1));
}
其他问题
在这里,您还可以修复代码中的其他一些问题:
公共类三角形
{
致:
公共类三角形
{
并将triangle.java
重命名为triangle.java
int size=0;
// ...
size=kb.nextInt();
你可以简单地写:
int size=kb.nextInt();
这是您的代码,经过重构以修复此问题:
Scanner kb=新的扫描仪(System.in);
System.out.println(“输入三角形的高度:”);
int size=kb.nextInt();
System.out.println(“要使用的字符:”);
字符c=kb.next().charAt(0);
对于(int i=0;ii;j--)
{
系统输出打印(“”);
}
对于(int k=0;k<(2*i-1);k++)
{
系统输出打印((char)(c+Math.abs(k-i+1));
}
System.out.println();
}
char
,而不是Character
,因为c
,Character
仅在您需要处理(例如,您想定义一个ArrayList
)时才应该使用,这与您当前的问题无关。因此,请替换:
Character c=kb.next().charAt(0);
与:
charc=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=kb.next().charAt(0);
如果用户输入一个
z
,您可能需要考虑怎么做,作为提示,您可能应该使用ascii
来获取后面的字母。System.out.print(c)
这将始终打印用户输入的信件。如果您需要打印不同的信件,您将不得不执行不同的操作。谢谢您的回答,谢谢您的宝贵建议!!以前没有人告诉我任何一封信。
b
cbc
dcbcd