繁体   English   中英

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

[英]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)));
}

其他问题

在这里时,您还可以修复代码中的其他一些问题:

  1. 在Java中,类的约定以大写字母开头。 这意味着您应该更改:

     public class triangle { 

    至:

     public class Triangle { 

    并重命名triangle.javaTriangle.java

  2. 您无需在顶部声明变量。 最好在初次需要它们时声明它们,以便将声明和初始赋值结合起来。 例如,代替:

     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(); } 
  3. 您应该将char而不是Character用作c Character ,如果你需要处理,才应使用装箱和拆箱 (例如,你想定义ArrayList<Character> ),这无关你当前的问题。 因此,请替换:

     Character c = kb.next().charAt(0); 

    有:

     char c = kb.next().charAt(0); 
  4. 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM