【问题标题】:Java number sign and asterisk [closed]Java数字符号和星号[关闭]
【发布时间】:2017-09-09 06:16:17
【问题描述】:

请帮助我:(我想尝试一个直角交替星号和数字符号。但我只得到这个输出:(我不能在这里放置数字符号)

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

我想要的是这个,如果我输入 6 输出是:

*
 #
  *
   #
    *
     #

如果我输入 3 的示例输出是:

*
 #
  *

这是我编写的代码:

    public static void main (String[] args) {
    Scanner in = new Scanner(System.in);        

    int x=0;

     System.out.println("Enter number: ");
        x = in.nextInt();   

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


    for( int j = 0; j < i; j++ ){
        System.out.print("*");

            }
            System.out.println();
        }

    }
      }

【问题讨论】:

  • 您的代码甚至打印替代符号吗?尝试至少在交替符号上做一些工作。暂时忽略模式。然后想出一些不起作用的东西。
  • 对不起,我是新手,我该怎么做才能得到这个程序?

标签: java loops


【解决方案1】:

您需要在内部循环中保留打印空间,一旦它从内部循环中出来,相应地打印* 和/或#

    Scanner in = new Scanner(System.in);        

    int x=0;

    System.out.println("Enter number: ");
    x = in.nextInt();

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

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

        if(i%2==1)
        {
           System.out.println("*");
        }else
        {
           System.out.println("#"); 
        }
    }

>>>Demo Link<<<

【讨论】:

    【解决方案2】:

    只要有奇偶值的条件,将 # 放在 even 上,将 * 放在 odd 上,j 的值从 1 开始,然后内部 for 循环的条件应具有 j

    我刚刚将您的代码更改为如下所示:

    for( int i = 1; i <= 6; i++ ){
                      for( int j = 1; j <=i; j++ ){
                            if(i==j){
                                  if(i%2==0){
                                        System.out.print("#");
                                  }else{
                                        System.out.print("*");
                                  }
                            }else{
                                  System.out.print(" ");
                            }
                      }
                      System.out.println();
                  }
    

    【讨论】:

      【解决方案3】:
      public static void main(String[] args) {
          Scanner in = new Scanner(System.in);
          System.out.print("Enter number: ");
          int x = in.nextInt();
      
          String spaces = "";
          boolean star = true;
      
          for (int i = 0; i < x; i++) {
              System.out.println(spaces + (star ? "*" : "#"));
      
              spaces += " ";
              star = !star;
          }
      }
      

      这应该可以解决问题,又快又简单。

      【讨论】:

        【解决方案4】:

        只需将"*" 替换为

        j < i-1 ? " " : (i % 2 != 0 ? "*" : "#")
        

        这将通过测试行和列位置并写入正确的字符来写入正确的输出。

        【讨论】:

        • 我刚刚试过,它工作正常。你试过了吗?
        • @nullpointer:你说请仔细阅读问题,模式不同。正如您应该看到的那样,在我的回答中,这两种模式都有(我已经阅读了吗?)。既然您知道您的怀疑是错误的,那么您将谈论 cmets。同样,你没有仔细阅读我的回答:我已经在代码后面写了关于它是如何工作的解释。现在,要求提供一个远程 java 编译器链接……对于 20 个字符的代码来说太棒了:我告诉过你它对我有用。如果你不相信我,你自己试试吧。就像我一样。保持怀疑,谈论事实。
        【解决方案5】:

        我建议您创建一个 char 数组来保存符号。您可以拥有一个计数器变量并以这样的方式使用它,即在每次迭代时它都会指向您想要显示的字符的索引。

        char sym[] = {'#', '*'};
        int n = user's input, i,j,c=0;
        for(i = 1; i<=n; i++){
            for(j = 1; j<i; j++)
                System.out.print(" "); //space
        
            System.out.print(sym[c]);
            c = (c+1)%2;
        
            System.out.println();
        }
        

        注意:注意我使用变量c 基本上保存一个整数并在除以2 时找到余数以获得索引的方式。

        这对于 n 的大输入值是一个非常糟糕的主意,但对于您使用过的那种输入值来说是可行的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-06
          • 2011-09-25
          • 1970-01-01
          • 1970-01-01
          • 2021-07-23
          • 2012-04-21
          • 2011-01-26
          • 2011-11-24
          相关资源
          最近更新 更多