您需要周圍的文件名 '新文件',創建一個掃描儀,
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
目前還不清楚,文件格式是什麼。文本文件不包含數組。名稱之間,整數之間是否真的有換行符?你事先知道名字的數量嗎?你是否被迫使用數組 - 因爲它會更復雜,(讀兩次文件),如果你使用數組並且不知道元素的數量。 –