首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何正确打印此三角形字符?

如何正确打印此三角形字符?
EN

Stack Overflow用户
提问于 2019-06-05 04:55:57
回答 1查看 840关注 0票数 1

这段代码要求用户输入三角形高度和字母。

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

在上面所示的三角形图案中,如何在给定字母之后打印字母?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)));
}

其他问题

既然你在这里,你也可以用你的代码修复一些其他的问题:

  1. 在Java语言中,类以大写字母开头是惯例。这意味着你应该改变:

公共类三角形{

至:

公共类三角{

并将Triangle.java.

  • You重命名为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);

  • Use 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56451238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档