如何将文件中的数据保存到数组中?

问题描述:

所以这里是新的代码: 代码是打印奇怪的文本,而不是数字,但正确地计算中位数和平均值。如何将文件中的数据保存到数组中?

import java.util.Scanner; 
import java.io.IOException; 
import java.io.File; 
import java.io.PrintWriter; 

public class Array { 

Scanner keyboard = new Scanner(System.in); 

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

    File myFile = new File("numbers.txt"); 
    Scanner inputFile = new Scanner(myFile); 

    int[] mynumFile = new int[4]; 
    int i = 0; 
    double median; 
    double sum = 0; 
    int middle; 

    while (inputFile.hasNextInt()) 
    { 

     mynumFile[i] = inputFile.nextInt(); 
     sum += mynumFile[i]; 
     i++;   


     System.out.println(numFile); 

     /*and if i do --> System.out.println(mynumFile); 
        it prints [[email protected], [[email protected], [[email protected],  [[email protected] and i dont know 
        what this is, since the program does not throw any errors or exceptions */ 


    } 

    middle = (mynumFile.length)/2; 

    median = (mynumFile[middle-1] + mynumFile[middle])/2.0; 

    System.out.println("Median number is: " + median); 
    System.out.println("Average of the numbers is: " + sum/mynumFile.length); 



    inputFile.close(); 



} 

}

所以我想写一个Java程序来读取所有文件中的数字到一个数组。然后找到数字的中位数并将其打印输出到控制台。中位数应该是双重的。偶数列表的中位数是中间两位数的平均值,例如,假设中位数为((NUMBER_2 + NUMBER_3)/ 2)。我也想找到数组中数字的平均值。

我的问题是我没有得到如何读取文件中的所有值到数组中。我的代码从我的文件输出到控制台的数字很好,但如何将它读入数组,然后进行计算?

这是一个测试程序,所以我的文件具有诸如5,7,9,4

任何帮助将不胜感激4个位数。

import java.util.Scanner; 
import java.io.IOException; 
import java.io.File; 
import java.io.PrintWriter; 

public class Array { 

    Scanner scnr = new Scanner(System.in); 

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

     File myFile = new File("numbers.txt"); 
     Scanner inputFile = new Scanner(myFile); 

     int[] mynumFile = new int[4]; 
     int i = 0; 

     while (inputFile.hasNext()) 
     { 
      int numFile = inputFile.nextInt(); 

      System.out.println(numFile); 
     } 

     inputFile.close(); 
    } 
} 
+0

什么与投票下降? – JavaCoder

你可以使用ArrayList来创建一个数组而不知道你将从文件中读取的元素的数量(我怀疑是这种情况)。

这将读取从文件到ArrayList的所有整数。

ArrayList<Integer> numFile = new ArrayList<Integer>(); 
while (inputFile.hasNext()) 
{ 
    numFile.add(inputFile.nextInt()); 
} 

要获得所有的整数,你可以做同样的事情,但使用foreach循环。

for(int i : numFile) 
{ 
    // use your number (i) here 
} 

如果你真的想使用一个数组,你可以使用你的变量i作为索引。但是,如果文件上的整数多于数组可以容纳的数量,则会发生异常。

int i = 0; 
while (inputFile.hasNext()) { 
    try{ 
     mynumFile[i++] = inputFile. 
    }catch(ArrayIndexOutOfBoundsException e){ 
     // more integers than you array can hold 
     // handle this situation here 
    } 
} 

如上所述,如果您没有足够的空间存放整数,则会抛出ArrayIndexOutOfBoundsException

编辑: 作为布鲁诺Toffolo评论的,我们可以try访问阵列上的i位置和处理该异常(如果发生)一个catch块上。这将避免异常通过您的方法传播,最终可能会终止您的程序。

编辑2: 的问题是,System.out.println(numFile);,将打印出您的ArrayList(numFile)的信息。如果要打印ArrayList的元素,则应使用get(i)method。此方法将检索ArrayList的位置i上的整数。即System.out.println(numFile.get(2));

+1

在最后的方法中,最好将它放在try/catch语句中以避免传播可能的异常。 –

+1

好点。我编辑了代码并添加了try/catch语句。 – Fred

+0

我对Java相当陌生,自己学习,这是我的第二个月,所以我不知道/知道多关于try/catch。它的目的是什么? – JavaCoder