您需要周围的文件名 '新文件',创建一个扫描仪,
p5m.readFromFile (new Scanner (new File("user.data")),
要使用它,你需要java.io:
import java.io.*;
如果我坚持您的要求,使用数组,和扫描仪,我可以做这样的事情:
import java.util.*;
import java.io.*;
public class Prog5Methods
{
public void readFromFile (Scanner input, String [] names, int [] numbers, char [] letters, double [] num2)
{
System.out.println("\nReading from a file...\n");
String [][] elems = new String [5][];
for (int i = 0; i < 4; ++i)
{
elems[i] = input.nextLine().split ("[ \t]+");
}
for (int typ = 0; typ < 4; ++typ)
{
int i = 0;
for (String s: elems[typ])
{
switch (typ)
{
case 0: names [i++] = s; break;
case 1: numbers[i++] = Integer.parseInt (s); break;
case 2: letters[i++] = s.charAt (0); break;
case 3: num2[i++] = Double.parseDouble (s); break;
}
System.out.println (i + " " + typ + " " + s);
}
}
System.out.println("\nDONE\n");
}
public static void main (String args[]) throws FileNotFoundException
{
Prog5Methods p5m = new Prog5Methods();
p5m.readFromFile (new Scanner (new File("user.data")),
new String [28],
new int [28],
new char [28],
new double [28]);
}
}
问题1:我需要知道,每行有28个元素,并且我将它们打印上的苍蝇,在这里。它们被卡在匿名数组中,从未使用过,但这只适用于简短的演示。我可以宣布的阵列,稍后打印:
String [] names = new String [28];
int [] numbers = new int [28];
char [] letters = new char [28];
double [] num2 = new double [28];
Prog5Methods p5m = new Prog5Methods();
p5m.readFromFile (new Scanner (new File("user.data")),
names, numbers, letters, num2);
我仍被绑28个元素。我可以延迟数组的初始化,直到通过读取文件知道有多少元素。
public String [][] readFromFile (Scanner input)
{
System.out.println("\nReading from a file...\n");
String [][] elems = new String [5][];
for (int i = 0; i < 4; ++i)
{
elems[i] = input.nextLine().split ("[ \t]+");
}
return elems;
}
public static void main (String args[]) throws FileNotFoundException
{
Prog5Methods p5m = new Prog5Methods();
String [][] elems = p5m.readFromFile (new Scanner (new File("user.data")));
int size = elems[0].length;
String [] names = new String [size];
int [] numbers = new int [size];
char [] letters = new char [size];
double [] num2 = new double [size];
for (int typ = 0; typ < 4; ++typ)
{
int i = 0;
for (String s: elems[typ])
{
switch (typ)
{
case 0: names [i++] = s; break;
case 1: numbers[i++] = Integer.parseInt (s); break;
case 2: letters[i++] = s.charAt (0); break;
case 3: num2[i++] = Double.parseDouble (s); break;
}
}
}
}
现在既然所有的行都包含相同数量的元素,它们可能是相关的?所以一个数据集就像用户一样,用声誉,代码和xy引用来描述一些东西。在面向对象的领域,这看起来像一个对象 - 让我们称它为用户:(如果你知道C,它就像一个结构)。
我们写一个甜美,小类:
// if we don't make it public, we can integrate it
// into the same file. Normally, we would make it public.
class User {
String name;
int rep;
char code;
double quote;
public String toString()
{
return name + "\t" + rep + "\t" + code + "\t" + quote;
}
// a constructor
public User (String name, int rep, char code, double quote)
{
this.name = name;
this.rep = rep;
this.code = code;
this.quote = quote;
}
}
,并从主方法的末尾使用它:
User [] users = new User[size];
for (int i = 0; i < size; ++i)
{
users[i] = new User (names[i], numbers[i], letters[i], num2[i]);
}
// simplified for-loop and calling toString of User implicitly:
for (User u: users)
System.out.println (u);
我不建议使用数组。一个ArrayList会更容易处理,但初学者往往被绑定到他们刚刚学到的东西,并且由于您使用Array标记了您的问题...
您可以使用适当的['Arrays.toString()'] (http://download.oracle.com/javase/7/docs/api/java/util/Arrays.html)? – trashgod
目前还不清楚,文件格式是什么。文本文件不包含数组。名称之间,整数之间是否真的有换行符?你事先知道名字的数量吗?你是否被迫使用数组 - 因为它会更复杂,(读两次文件),如果你使用数组并且不知道元素的数量。 –