嵌套循环中的逻辑

时间:2014-09-15 18:31:25

标签: java arrays loops logic nested-loops

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

程序是读取1-100包含的整数。然后生成一个类似给定图像上的图表。

enter image description here

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

我班上没有人能够看到怎么样,但是我可以看到她对我提出的解决方案的看法,如下所示,因为当我使用第一个时出现问题。填充数组中的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("");
    }
}

她建议我创建一个包含与原始数组相同数量的新数组,有点像我在这里写的那样,但我似乎无法弄清楚如何循环它,打印出来。她甚至说如果句子没有可能,所以我想我必须在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();
}

1 个答案:

答案 0 :(得分:0)

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

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();
}