【问题标题】:HISTOGRAM (Array = Stars Output)直方图(阵列 = 星星输出)
【发布时间】:2015-10-09 04:23:16
【问题描述】:

直方图:
我的代码有问题..
预期输出必须是这样的:

输出:

0 8 ********  
1 6 ******   
2 3 ***  
3 7 *******

但我的显示:

0 8 *******************************    
1 6 *******************************
2 3 *******************************  
3 7 *******************************

我已经搜索并将它与我的代码进行比较,但没有什么能真正帮助我..

能否请您看一下我的代码并提出一些建议,并在

如何正确编码预期的输出..

感谢任何帮助...

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

        StringBuilder stringBuilder = new StringBuilder();

             int n = 0;
            n  = Integer.parseInt(JOptionPane.showInputDialog("Enter value"));

            int[] arr = new int[n];
             String stars = "";
             int input = 0;



            for(int c = 0; c<n; c++ ){
            input  = Integer.parseInt(JOptionPane.showInputDialog("Enter number"));
            arr[c]=input;


             for(int i=0; i<input; i++){ 
                        stringBuilder.append("*"); 
                 }


                 }
            for(int i=0; i<input; i++){ 
                stringBuilder.append("*"); 
            }

                for (int o = 0; o<n ; o++){ 
                stars = stringBuilder.toString();
                System.out.println( o +" "+arr[o]+" "+stars);
                }



        }
        }
    }

【问题讨论】:

  • “您能否看一下我的代码并提出一些建议,然后再接再厉” - 考虑提供一个 runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应
  • 向我们展示您的代码。答案很可能对每个人都是显而易见的,当然对@MadProgrammer 来说也是如此。
  • 请忽略第二条和第三条评论,听从@MadProgrammer 的建议。 IE。不要发布不可编译的代码 sn-p,而是 minimal reproducible example。投票结束(因为缺少 MCVE)。
  • 其他提示: 1) 使用逻辑一致的形式缩进代码行和块。缩进是为了让代码流更容易理解! 2) 源代码中的一个空白行是永远需要的。 { 之后或} 之前的空行通常也是多余的。
  • 没有,( o +" "+arr[o]+" "+stars) 是一个由计数器编号的循环,可能在for循环中为o,只是一个打印行

标签: java arrays histogram


【解决方案1】:

每次在builder对象中追加*,清除之前的内容。你可以使用stringBuilder.setLength(0);

import javax.swing.*;

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

    StringBuilder stringBuilder = new StringBuilder();

    int n = 0;
    n  = Integer.parseInt(JOptionPane.showInputDialog("Enter value"));

    int[] arr = new int[n];
    String stars = "";
    int input = 0;

    for(int c = 0; c<n; c++ ){
      input  = Integer.parseInt(JOptionPane.showInputDialog("Enter number"));
      arr[c]=input;

      for(int i=0; i<input; i++){
        stringBuilder.append("*");
      }
      stars = stringBuilder.toString();
      System.out.println( c +" "+arr[c]+" "+stars);
      stringBuilder.setLength(0);             // Reset the `stringBuilder` once pattern is written
    }
  }
}

输出:

0 8 ********  
1 6 ******  
2 3 ***  
3 7 *******  

【讨论】:

  • @TimBiegeleisen 适用于小范围内的小测试用例。
  • 谢谢.. 所以 .setLength(0) 是一个使值为零的函数,因此每次循环输入的等效星号时都会显示.. 我现在因为这种混乱而自嘲..这是 Stack Exchange 的第一次体验。感谢您的帮助和补充信息
猜你喜欢
  • 2023-03-31
  • 2015-11-01
  • 1970-01-01
  • 2021-03-17
  • 2022-10-06
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多