如何使用for循环打印星形数组中元素的大小

时间:2015-04-27 03:40:16

标签: java arrays loops

我正在从文本文件中读取整数值,并将它们存储在10 ex,1-10,11-20的组中,并且像数组一样存储。我需要在一行上打印一个星号,表示每组中有多少个数字:

1-10 *******

11-20 ************

我已编码了所有内容,但我无法正确打印输出。我试图使用嵌套for循环,但没有太多运气。

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        int fileInts;
        Scanner scan = new Scanner(new File("Histogram.txt"));
        int[] count = new int[10];

        // while loop
        while (scan.hasNext()) {
            // find next line
            String num = scan.next();
            fileInts = Integer.parseInt(num);

            if (fileInts > 0 && fileInts < 11) {
                count[0]++;
            } else if (fileInts > 10 && fileInts < 21) {
                count[1]++;
            } else if (fileInts > 20 && fileInts < 31) {
                count[2]++;
            } else if (fileInts > 30 && fileInts < 41) {
                count[3]++;
            } else if (fileInts > 40 && fileInts < 51) {
                count[4]++;
            } else if (fileInts > 50 && fileInts < 61) {
                count[5]++;
            } else if (fileInts > 60 && fileInts < 71) {
                count[6]++;
            } else if (fileInts > 70 && fileInts < 81) {
                count[7]++;
            } else if (fileInts > 80 && fileInts < 91) {
                count[8]++;
            } else if (fileInts > 90 && fileInts < 101) {
                count[9]++;
            }
        }

        for (int s : count) {
            {
                for (int c = 0; c < count[c]; c++) {
                    System.out.print("*");
                    System.out.println();
                    s++;
                }
            }
            //System.out.println(count[]);
        }
    }
}

3 个答案:

答案 0 :(得分:0)

首先,你应该只使用

count[fileInts / 10]++;

而不是这个veeery长if-else块。对整数进行除法总是只给出整数值,而不是浮点数。如果您需要剩余的值,请使用模数%。

回答你的问题:你的第二个循环只会遍历列表中的元素,而不是每个单个字符。你期望例如21是2个字符,不是这种情况,因为你只计算整数 - 不计算每个整数中的十进制数。

答案 1 :(得分:0)

你的循环必须是这样的:

for (int s : count) {
    {
        for (int c = 0; c < s; c++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

用简单的英语思考这个过程:

  1. 对于范围内的每个整数,
    1. 打印明星
    2. 重复直到星数==当前整数
  2. 重复循环
  3. 其他说明:

    内圈内的

    System.out.println();在每个星星后面打印一个新行。那不是你想要的。您执行想要在打印一个范围的星星后打印新行。

    在你的循环中,你正在将计数器变量ccount[c]进行比较,这是没有意义的。您需要将其与您正在使用的当前整数(您已定义为s)进行比较。

    当您尝试推断某个过程在程序中的工作方式时,它可以帮助您记下一组输入数据并手动完成。我知道我通过改组一副牌并完成它们来学习常见的排序算法。

答案 2 :(得分:0)

要在计算出某个范围内的每个数字的次数后循环播放数组,请执行以下操作:

for (int i = 0; i < count.length; i++)
{
    for (int j = 0; j < count[i]; j++)
        System.out.print("*");
    System.out.println("");
}

但这有另一个问题,你无法看到你在计算哪些数字。创建一个具有数字范围的String数组可能是一个想法:

String[] ranges = {"1 - 10: ", "11 - 20: ", ... , "90 - 100: " };

然后改变你的循环以首先打印出适当的范围:

for (int i = 0; i < count.length; i++)
{
    System.out.print(ranges[i]);
    for (int j = 0; j < count[i]; j++)
        System.out.print("*");
    System.out.println();
}