【问题标题】:Print right angle triangle with characters打印带字符的直角三角形
【发布时间】:2018-02-09 02:18:20
【问题描述】:

我想创建一个由字符组成的直角三角形。代码询问您希望三角形有多少行,当然最大值是 26。当我测试代码时,我输入 5(无缘无故)。到目前为止,这是我的代码:

import java.util.*;

public class Uppgift3 {
    public static void main (String [] args) {

        Scanner input = new Scanner (System.in);

        System.out.print("Ange längden på de 2 lika långa sidorna (avsluta med -1): ");
        int rader = input.nextInt();

        int i = 0;
        int j = 0;
        int k = 0;
        char bokstav = (char)( i + 'A');

        for (i=0; i<rader; i++) {
            for (j=0; j<i+1; j++) {
                System.out.print(bokstav);

            }bokstav++;
            System.out.println();

        }

    }

}

这是我要的输出(如果你输入 5):

A
AB
ABC
ABCD
ABCDE

这是我在上面的代码中输入 5 时得到的:

A
BB
CCC
DDDD
EEEEE

有人可以帮帮我吗?我是在正确的轨道上,还是我完全迷失了?感觉像后者……是的,这是给学校的。我已经尽可能多地尝试了,但现在卡住了。

非常感谢!

【问题讨论】:

  • }bokstav++; 更改为bokstav++; } bokstav = 'A';。或者将您的循环更改为for (int i = 1; i &lt;= rader; i++) { for (int j = 0; j &lt; i; j++) System.out.print((char)('A' + j)); System.out.println(); }。或for (int i = 1; i &lt;= rader; i++) System.out.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ".substring(0, i));.
  • 无论如何,这与递归有什么关系?
  • 谢谢!我的错,我改变了问题的标题。

标签: java for-loop character angle triangular


【解决方案1】:

你的解决方案的问题是你只在写完每一行后增加字符;您应该在写入每个字符后递增字符。成功写入后,您应该将字符重置为“A”。

    for (int i = 0; i < 5; i++) {
        char c = 'A';
        for (int j = 0; j < i+1; j++) {
            System.out.print(c);
            c++;
        }
        System.out.println();
    }

我还要指出,这个解决方案不是recursion。递归方法的一个简单定义是调用自身来找到问题的较小部分的解决方案。例如,打印类似金字塔的递归解决方案看起来像这样。

public static void print(int level) {
    if (level <= 0 || level > 26) {
        return;
    }
    print(level - 1);
    System.out.println(line(level));
}

public static String line(int level) {
    String line = "";
    if (level > 0 && level <= 26) {
        line = line(level--) + (char)('A' + level);
    }
    return line;
}

【讨论】:

  • 好的!我已经改变了标题。感谢您指出这一点!
【解决方案2】:

你没有在正确的地方增加你的 bokstav 变量。您还需要每行重置它。

试试这个:

public static void main (String [] args)
{

    Scanner input = new Scanner (System.in);

    System.out.print("Enter the amount of rows your want: ");
    int rows = input.nextInt();

    char bokstav = 'A';

    for(int i=0; i<rows; i++)
    {
        for(int j=0; j<i+1; j++)
        {
            System.out.print(bokstav);
            bokstav++;
        }

        bokstav = 'A';
        System.out.println();

    }

}

【讨论】:

    【解决方案3】:

    试试这个:

    char bokstav = 'A';
    
    for (i=0; i<rader; i++) {
        bokstav = 'A';
        for (j=0; j<i+1; j++) {
            System.out.print(bokstav++);
        }
        System.out.println();
    }
    

    【讨论】:

    • 请不要发布“试试这个”代码转储答案。至少解释答案,因为解释比发布的代码更重要。
    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多