为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Java 创建用户输入星号三角形

使用 Java 创建用户输入星号三角形

料青山看我应如是 2022-07-06 17:01:31
我想要...使用 Java创建一个星号三角形,它与用户输入的任何数字(1-50 之间)的长度相匹配。细节第一行总是以星号开头。下一行将增加一个星号,直到它与用户的输入相匹配。然后以下行将递减,直到它回到一个星号。例如,如果用户输入 3,则输出将在第一行有一个星号,在第二行有两个星号,在第三行有三个星号,然后在结束前恢复为下一行的两个星号最后一行带有星号。到目前为止我尝试过的我需要使用嵌套的 for 循环。到目前为止,我尝试使用我在下面制作的这个练习示例对其进行测试。我只能在数字的输出上创建。我也有一些输出星号三角形的概念。如何应用此代码的概念来跟随用户输入的数字? import java.util.Scanner;public class Program{    public static void main(String[] args) {        Scanner keyboard = new Scanner(System.in);        int count, index = 0, value, number;        System.out.println("This program creates a pattern of numbers " );        System.out.println("Based on a number you enter." );            System.out.println("Please enter a positive integer. " );        count = keyboard.nextInt();        value = count;        for (index = 1; index <= count; index++)        {            for (number = value; number >= 1; number--)            {                System.out.println(number);            }            value--;            System.out.println();        }        }}
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这是我将如何进行

  1. 编写一个printAsterisks将 int N 作为参数并写入一行 N 个星号的方法。您将需要一个for循环来执行此操作。

  2. printAsterisks在从 1 计数到 COUNT的for循环中调用

  3. 调用printAsterisks从 COUNT-1 倒数到 1 的第二个循环

这应该够了吧。

另外,作为旁注,您应该关闭扫描仪。这样做的简单方法是将 ot 包含在 try-with-resource 中,如下所示:

try (Scanner keyboard = new Scanner(System.in);) {

 // your code here

}

让我们知道可以运行的程序版本(或您仍然有的问题):)


查看完整回答
反对 回复 2022-07-06
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

这是你想要的:


public class Asterisk {

    private static final String ASTERISK = "*";

    private static final String SPACE = "";

    private static int LENGTH;


    public static void main(String[] args) {

        try{

            readLength();

            for (int i=1; i<=LENGTH; i++) {

                if (i == LENGTH) {

                    for (int j=LENGTH; j>=1; j--) {

                        drawLine(j);

                    }   

                    break;

                }

                drawLine(i);

            }

        }catch (Exception e) {

            System.out.println("You must enter a number between 1 and 50.");

        }

    }


    static void readLength(){

        System.out.println("Enter asterisk's length (1-50)");

        LENGTH = Integer.parseInt(System.console().readLine());

        if (LENGTH<=0 || LENGTH>50) 

            throw new NumberFormatException();

    }


    static void drawLine(int asterisks){

        StringBuilder line = new StringBuilder();

        int spacesLeft = getLeftSpaceCount(asterisks);

        int spacesRight = getRightSpaceCount(asterisks);


        for (int i=0; i<spacesLeft; i++) {

            line.append(SPACE);

        }


        for (int i=0; i<asterisks; i++) {

            line.append(ASTERISK);

        }


        for (int i=0; i<spacesRight; i++) {

            line.append(SPACE);

        }


        System.out.println(line.toString()+"\n");

    }


    static int getLeftSpaceCount(int asterisks){

        int spaces = LENGTH - asterisks;

        int mod = spaces%2;

        return spaces/2 + mod;  

    }


    static int getRightSpaceCount(int asterisks){

        int spaces = LENGTH - asterisks;

        return spaces/2;    

    }

}

我需要使用嵌套的 for 循环


是的,主要逻辑就在那里……


for (int i=1; i<=LENGTH; i++) {

    if (i == LENGTH) {

        for (int j=LENGTH; j>=1; j--) {

            drawLine(j);

        }   

        break;

    }

    drawLine(i);

}

使用 5 作为输入的三角形。


*


**


***


****


*****


****


***


**


*

小费:


有一种更简单的方法可以使用System.console().readLine().


查看完整回答
反对 回复 2022-07-06
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

关于打印部分,我想稍微整理一下答案:


int input = 3; //just an example, you can hook in user input I'm sure!

for (int i = 1; i < (input * 2); i++) {

    int amount = i > input ? i / 2 : i;

    for (int a = 0; a < amount; a++)

        System.out.print("*");

    }

    System.out.println();

}

对于我们的循环条件,稍微解释一下:


i < (input * 2): 因为i从 1 开始,我们可以考虑一些情况。如果我们输入 1,我们需要 1 行。输入 2、3 行。4:5行。简而言之,长度与行数的关系是row count = (length * 2) - 1,所以我从 1 而不是 0 开始另外偏移 1。


i > input ? i / 2 : i:这称为三元语句,它基本上是一个 if 语句,您可以在其中获取表单中的值boolean/if ? value_if_true : value_if_false。因此,如果行数大于您请求的长度(超过一半),则长度除以 2。


此外,该循环中的所有内容都可能是一行:


System.out.println(new String(new char[i > input ? i / 2 : i]).replace('\0', '*'));

是的,从技术上讲,使用 IntStream 我们可以将整个事情变成一条线,尽管那时我会为了清楚起见而换行


请记住,我不会将其称为“初学者的解决方案”,但希望它可以激发您学习有关编程的其他一些有用的小知识,例如为什么我\0在单行示例中将其替换。


查看完整回答
反对 回复 2022-07-06
  • 3 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信