【问题标题】:Logic in nested loops嵌套循环中的逻辑
【发布时间】:2014-09-15 18:31:25
【问题描述】:

任务是用 Java 创建一个程序,将直方图打印到控制台,显示一组值的频率分布

程序是读取1-100范围内的整数,包括。然后生成一个类似于给定图像上的图表。

到目前为止,我已经想出了以下解决方案,但是老师说它太复杂了,并且有一个更简单的方法来实现它。

我班上没有人知道怎么做,但是我可以看到她对我提出的解决方案的看法,如下所示,因为当我使用第一个时,缩放它时存在问题int 在填充的数组中,对其进行排序。

public void printChart() 
{
    res = new int[10];

    for (int i = 0; i < ia.length; i++) {

        int firstDigit = 0;

        if (i > 10) {
            firstDigit = Integer.parseInt(Integer.toString(ia[i]).substring(0, 1));
        }       

        res[firstDigit] += 1;
    }

    for (int i = 0; i < res.length; i++) {

        System.out.format("%-10s %-5s", (i) + "1" + " - " + (i+1) + "0", "|");

        for (int o = 0; o < res[i]; o++) {
            System.out.print("*");
        }  

        System.out.println("");
    }
}

她建议我创建一个包含与原始数组相同数量的新数组,有点像我在这里写的,但我似乎无法弄清楚如何循环通过它来打印出来。她甚至说没有 if 语句是可能的,所以我想我必须在 for 循环中写一些条件。

public void printChart2()
{
    res = new int[NUMBERS];

    // Fill the other array, by counting the amount of a specific int
    // and placing it on the given relevant index
    for (int i = 0; i < ia.length; i++) {
        res[ia[i]] += 1;
    }

    for (int i = 0; i < res.length; i += 10) {

        System.out.format("%-10s %-5s", (i+1) + " - " + (i+10), "|");

    }
}

这是我的字段和构造函数,以防万一。

private final int NUMBERS = 100;
private final int RANDOMMAX = 99;
private int[] ia;
private int[] res;

public Arbitrary() 
{
    ia = new int[NUMBERS];

    for (int i = 0; i < NUMBERS; i++) {
        ia[i] = (int) (Math.random() * RANDOMMAX) + 1;
    }   

    printChart();
}

【问题讨论】:

  • 你可以使用% mod by length of res,而不是做substring来获得正确的bucket,这会给你正确的bucket。
  • 我相信如果你想复制一个数组,你会这样做:for (int i = 0; i &lt; ia.length; i++) {res[i] = ia[i];}
  • 太棒了,这简化了我自己的程序版本,并使其可扩展
  • @Pokechu22 我不想对其进行排序,因此新数组中的给定点包含 1 的 2 的 3 的数量,依此类推: res[9] = 3 (instances 9) 这样她说可以创建带有嵌套循环且没有 if 的所示图表
  • @user1277041 不幸的是,我无法看到图像对我的问题有影响。抱歉,这没有帮助。

标签: java arrays loops logic nested-loops


【解决方案1】:

你的整个代码应该像这样简单......

int NUMBERS = 100;
int RANDOMMAX = 99;
int tableOutput[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (int i = 0; i < NUMBERS; i++) {
    int temp = (int) (Math.random() * RANDOMMAX) + 1;
    tableOutput[temp % 10]++;
}
for (int i = 1; i <= 10; i++) {
    System.out.print(i + " - " + i * 10 + "| ");
    for (int j = 0; j < tableOutput[i-1]; j++) {
        System.out.print("*");
    }
    System.out.println();
}

【讨论】:

  • 这绝对简化了它,并且是我相信她希望我们想出的那种解决方案。
  • 在你提交这个之前......如果你有困难问我......请理解它的作用......
  • 我确实了解其中的逻辑并理解代码。想我想出像这样的最简单的解决方案还需要一段时间,但实践应该会把我带到那里。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多