【问题标题】:Capturing values from file in array从数组中的文件中捕获值
【发布时间】:2015-06-27 00:10:58
【问题描述】:

我有以下代码从文件中读取数字,然后为 10 位数范围内的数字的多次出现打印星号。问题在于我的 for 循环将数字添加到数组中。每当我执行代码时,它都会打印文件中的最后一个数字 (22) 20 次,并在 21-30 字符串中列出一个星号。我相信这一定是一个简单的订单问题。我错过了什么?

import java.util.Scanner;
import java.io.*;


public class histogram {

public static void main(String[] args) {

    try {

        final File numbers = new File("numbers.txt");
        Scanner filescan = new Scanner(numbers);

        int[] list = new int[101];


        while (filescan.hasNext()) {
            int num = filescan.nextInt();
            for(int i = 0; i < 101; i++)
            list[i] = num;

        }

        for(int value : list)
            System.out.println(value);

        String[] Stars = {"1-10 |", "11-20 |", "21-30 |", "31-40 |", "41-50 |", "51-60 |", "61-70 |", "71-80 |", "81-90 |", "91-100 |"};

        int number = 0;
        for (int st = 0; st < 101; st++)
            number = list[st];
        if (number < 11)
            Stars[0] += "*";
        else if (number < 21)
            Stars[1] += "*";
        else if (number < 31)
            Stars[2] += "*";
        else if (number < 41)
            Stars[3] += "*";
        else if (number < 51)
            Stars[4] += "*";
        else if (number < 61)
            Stars[5] += "*";
        else if (number < 71)
            Stars[6] += "*";
        else if (number < 81)
            Stars[7] += "*";
        else if (number < 91)
            Stars[8] += "*";
        else if (number < 101)
            Stars[9] += "*";

        for (int print = 0; print < 10; print++)
            System.out.println(Stars[print]);


        filescan.close();
    } catch (FileNotFoundException ex) {

    }

}

}

【问题讨论】:

  • 使用循环概括重复模式
  • 我认为您的 for 循环周围缺少大括号。所以 number 只是列表中的最后一个条目

标签: arrays histogram


【解决方案1】:

我认为这是-

while (filescan.hasNext()) {
    int num = filescan.nextInt();
    for(int i = 0; i < 101; i++)
    list[i] = num;
}

应该是这个-

int i = 0, num;
while (filescan.hasNext()) {
    num = filescan.nextInt();
    list[i] = num;
    if(i == 100)
        break;
    i++;
}

【讨论】:

  • 我缩进了它,它似乎没有任何区别。我还尝试在 for 循环周围放置大括号。我每次都得到相同的结果。
  • 这部分现在可以正常工作了吗for(int value : list) System.out.println(value);??
  • 该部分最初工作正常。它打印“1-10 |”字符串和 22 显示为 21-30 |* 但我在 txt 文件中有大约 20 个不同的数字。它只读取 22 并打印 100 次。假设读取并记录每个单独的数字,然后打印每个范围内有多少数字的星号。
  • 好的,我想我发现了错误。等等,让我看看我能用它做什么。
  • @Kevin 我对缩进的事情感到抱歉。当我主要从事该工作时,我将语言混淆为python。但是,问题在于您实现循环的方式。请检查编辑后的答案。
猜你喜欢
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
相关资源
最近更新 更多