Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;歪斜的;Java中带星号的三角形_Java_Loops_For Loop_Nested Loops - Fatal编程技术网

&引用;歪斜的;Java中带星号的三角形

&引用;歪斜的;Java中带星号的三角形,java,loops,for-loop,nested-loops,Java,Loops,For Loop,Nested Loops,我真的不明白为什么所有的反对票: 我发布了自己的试用版 它很好地解释了需要什么 我对这个主题进行了广泛的研究,我发现对于像我这样的初学者(我几周前开始使用Java)来说,其他类型的东西是完全不同的 老实说,我在这里看到的唯一问题是,人们之所以对一个问题投否决票,是因为他们没有阅读文章,或者是因为他们在不知道到底发生了什么的情况下判断某人懒惰 我在学Java 我正在尝试下面的方法,你输入一个数字,它会创建一个带星号的三角形。我已经很清楚了,除了我的第二个循环没有给我我认为应该给的(从一个给定的

我真的不明白为什么所有的反对票:

  • 我发布了自己的试用版
  • 它很好地解释了需要什么
  • 我对这个主题进行了广泛的研究,我发现对于像我这样的初学者(我几周前开始使用Java)来说,其他类型的东西是完全不同的
  • 老实说,我在这里看到的唯一问题是,人们之所以对一个问题投否决票,是因为他们没有阅读文章,或者是因为他们在不知道到底发生了什么的情况下判断某人懒惰
我在学Java

我正在尝试下面的方法,你输入一个数字,它会创建一个带星号的三角形。我已经很清楚了,除了我的第二个循环没有给我我认为应该给的(从一个给定的范围到一个极限,它是递增的,而不是相反的,这让我发疯)

我不明白为什么它不能按预期的那样工作。我只需要对它有一双新的眼睛(以及如何学会自己看这些东西的建议)

此时3的输出为:

*
**
***
*
**
而不是

*
**
***
**
*
下面是我的代码,并解释了我要做的事情:

/*

    Write a program that asks the user to enter the size of a triangle (an integer
    from 1 to 50). Display the triangle by writing lines of asterisks. The first
    line will have one asterisk, the next two, and so on, with each line having one
    more asterisk than the previous line, up to the number entered by the user.
    On the next line write one fewr asterisk and continue by decreasing the number
    of asterisk by 1 for each successive line until only one asterisk is displayed.
    Hint: use nested for loops; the outside loop controls the number of lines to
    write, and the inside loop controls the number of asterisks to display on a line)
    For example, if the user enters 3, the output would be:
    *
    **
    ***
    **
    *

*/

import java.util.Scanner;

public class Triangles
{
    public static void main (String[] args)
    {
        Scanner kb = new Scanner(System.in);
        System.out.println("Enter the number of your triangle (1 to 50):");
        int userInput = kb.nextInt();
        int minus = userInput -1;
        int lineNumber = userInput + minus;
        int half = (lineNumber / 2) + 1;

        for(int i = 1; i <= half; i++)
        {
            System.out.println("");
            for (int j = 1; j <= i; j++)
            {
                System.out.print("*");
            }
        }
        for (int i = minus; i >= 1; i--)
        {
            System.out.println("");
            for (int j = minus; j >= i; j--)
            {
                System.out.print("*");
            }
        }
    }
}
/*
编写一个程序,要求用户输入三角形(整数)的大小
从1到50)。通过书写星号线来显示三角形。第一
行将有一个星号,下两个星号,依此类推,每行有一个星号
星号比前一行多,最多为用户输入的数字。
在下一行写一个fewr星号,并通过减少数字继续
对于每一连续行,星号的长度为1,直到只显示一个星号为止。
提示:使用嵌套循环;外部循环控制要添加的行数
写入,内部循环控制要在一行上显示的星号数)
例如,如果用户输入3,则输出为:
*
**
***
**
*
*/
导入java.util.Scanner;
公共类三角形
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
System.out.println(“输入三角形的编号(1到50):”;
int userInput=kb.nextInt();
int减号=用户输入-1;
int lineNumber=用户输入+减号;
int half=(行号/2)+1;
对于(int i=1;i=i;j--)
{
系统输出打印(“*”);
}
}
}
}
您可以试试

  for (int i = minus; i >= 1; i--)
        {
            System.out.println("");
            for (int j = minus; j >= 0 /* it was i */; j--)
            {
                System.out.print("*");
            }
        }

intadd=1;
国际星号=1;
而(星号>0){
如果(星号==用户输入)
{
add=-1;//切换到减量
}

对于(int i=0;i只需更改内部循环:

for (int i = minus; i >= 1; i--)
{
    System.out.println("");
    for (int j = 1; j <= i; j++)
    {
        System.out.print("*");
    }
}
for(int i=减号;i>=1;i--)
{
System.out.println(“”);

对于(int j=1;j您可以尝试以下方法:

Scanner kb = new Scanner(System.in);
System.out.print("Enter the number of your triangle (1 to 50): ");
int input = kb.nextInt();
for (int i = 0; i < input; i++) {
  System.out.println();
  for (int j = 0; j <= i; j++) {
    System.out.print("*");
  }
}
for (int i = input - 1; i > 0; i--) {
  System.out.println();
  for (int j = 0; j < i; j++) {
    System.out.print("*");
  }
}

将内部循环更改为此。我对其进行了测试,效果非常好:

        //for (int j = minus; j >= i; j--) // <--old line
        for (int j = 0; j<i; j++) //<--new line
        {
            System.out.print("*");
        }

//对于(int j=减号;j>=i;j--)//这是一个很好的短方法:

private static void test(int n) {
    char[] buf = new char[n];
    Arrays.fill(buf, '*');
    for (int row = 1 - n; row < n; row++)
        System.out.println(new String(buf, 0, n - Math.abs(row)));
}
输出

*
**
***
****
*****
****
***
**
*

…这不起作用输出是错误的,它从第二个循环的1个星号开始。顺便说一下…你应该进行验证以避免引入大于50的数字…你说输入三角形的数字(1到50):但你不执行任何类型的验证。啊,我忘了调整“减号”在1的内部循环中。现在我明白了为什么它不起作用。我的意思是,sorta。我必须尝试更多,但连续几个小时陷入问题中而没有人询问是相当困难的。谢谢!Re:验证,我知道,但既然测试不是公开的,而是由某人执行的受控测试,它只是为了达到它的目的ed,在本例中,使用嵌套循环。非常感谢!不客气:)我明白了,谢谢!你介意帮我总结一下为什么我的第二个循环没有减少星号的数量吗?第一个循环的停止条件应该“更早”停止,这就是为什么
i>=1
在循环中发生变化。第二个内部循环变得更“有趣”,您可以前进或后退,但必须在子句、条件和终止条件上保持一致。谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!哇,这真是太好了!是的,对于打印图案,其中上半部分是下半部分的镜像,有一条中心线,从
-x
+x
,并使用
Math.abs()
,这是一个很好的技巧。
Enter the number of your triangle (1 to 50): 5

*
**
***
****
*****
****
***
**
*

Process finished with exit code 0
        //for (int j = minus; j >= i; j--) // <--old line
        for (int j = 0; j<i; j++) //<--new line
        {
            System.out.print("*");
        }
private static void test(int n) {
    char[] buf = new char[n];
    Arrays.fill(buf, '*');
    for (int row = 1 - n; row < n; row++)
        System.out.println(new String(buf, 0, n - Math.abs(row)));
}
public static void main(String[] args) {
    test(5);
}