Java输入文件不会打印

时间:2013-02-28 08:10:55

标签: java file input

我正在进行一项作业,我需要在java中输入来自输入文件的3种不同得分的平均值。平均值必须四舍五入到小数点后两位。我尝试创建扫描程序,以便输入文件中的小数可以添加并平均,但是当我点击运行时,netbeans只会运行而没有打印出来。我也没有收到错误。关于如何让它运行的任何提示将不胜感激。

输入文件内容: 7.88 6.44 5.66 3.44 7.50 9.80 4.33 2.31 8.99 7.62 3.67 4.39

``这是代码(已导入所有必要的导入)

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

    {
        Scanner sc = new Scanner(new File("Gym.in"));

        double Number = sc.nextFloat();
        {
            NumberFormat fmt = NumberFormat.getNumberInstance();
            fmt.setMinimumFractionDigits(2);
            fmt.setMaximumFractionDigits(2);

            Scanner sf = new Scanner(new File("Gym.in"));
            int maxIndx = -1;
            String text[] = new String[100];
            while (sf.hasNext())
                ;
            {
                maxIndx++;
                text[maxIndx] = sf.nextLine();
                System.out.println(text[maxIndx]);
            }
            sf.close();

            String answer;
            double sum;
            double average;

            for (int j = 0; j <= maxIndx; j++) {
                StringTokenizer st = new StringTokenizer(text[j]);
                Scanner sg = new Scanner(text[j]);
                System.out.println(text[j]);

                Scanner ss = new Scanner(text[j]);
                sum = 0;
                average = sum / 10;
                answer = "For Competitor #1, the average is: ";

                while (sc.hasNext()) {
                    double i = sc.nextDouble();
                    answer = answer + i;
                    sum = sum + i;
                }

                answer = answer + average;
                System.out.println(answer);

            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这段代码有几个问题 - 一个是您希望'.'作为小数点字符,但在我的语言环境中它是',',所以我得到的第一件事是{{1 }}

无论如何,你的代码似乎没有做任何事情的原因是这些:

java.util.InputMismatchException

这实际上是一个无限循环。当您的扫描仪有更多令牌要传递时,您正在循环,但您永远不会检索下一个令牌。因此 while (sf.hasNext()) ; 将永远返回hasNext()

如果删除true,则代码会一直运行。我没有验证结果。


您还需要重新计算平均值:使用代码,您的平均值将始终保持;

0.0

我也不确定你为什么要将总和除以10 - 在你的情况下这应该是12(假设“每组得分”在输入文件中是一行)。总而言之,您的方法并不是太糟糕 - 您基本上必须删除一些不必要的代码并以正确的顺序放置第二个循环中的语句:)

sum = 0;
average = sum / 10;
...
answer = answer + average;
System.out.println(answer);

最后,您不需要将每一行读入for (int j = 0; j <= maxIndx; j++) { double sum = 0; double average = 0; Scanner ss = new Scanner(text[j]); String answer = "For Competitor #1, the average is: "; while (sc.hasNext()) { double i = sc.nextDouble(); sum = sum + i; } average = sum / 12; // better use number of tokens read instead of hard coded 12 answer = answer + average; System.out.println(answer); } 数组 - 只需读取一行并立即处理。这样可以节省内存,并在文件中有超过100行时避免使用String。我把它作为一个练习让你:)

答案 1 :(得分:0)

删除;之后(sf.hasNext())

变化

while (sf.hasNext())
;
{

while (sf.hasNext())
{