所以这是新的代码: 代码是打印奇怪的文本而不是数字,但正确计算中位数和平均值。
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 [I@55f96302, [I@55f96302, [I@55f96302, [I@55f96302 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程序,将文件中的所有数字读入一个数组。然后找到数字的中位数并将其打印到控制台。中位数应为double类型。偶数列表的中位数是中间两个数字的平均值,例如假设中位数是((NUMBER_2 + NUMBER_3)/ 2)。我还想找到数组中数字的平均值。
我的问题是我无法读取如何将文件中的所有值读入数组。我的代码打印出从我的文件到控制台的数字很好,但如何将其读入数组然后进行计算?
这是一个测试程序,所以我的文件有4个单位数字,如5,7,9,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 :(得分:3)
您可以使用ArrayList创建一个数组,而不知道您将从文件中读取的元素数量(我怀疑是这种情况)。
这将读取从File到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。
修改强> 正如Bruno Toffolo评论的那样,我们可以try访问数组上的i位置并在catch块上处理该异常(如果它发生)。这样可以避免通过您的方法传播异常,最终可能会终止您的程序。
编辑2:
问题是System.out.println(numFile);
将打印有关您的ArrayList(numFile)的信息。如果要打印ArrayList的元素,则应使用get(i)
method。此方法将检索ArrayList的位置i上的整数。即System.out.println(numFile.get(2));