この状況でファイルを読み込む必要はありません。私は間違いなく外部のユーザーが基本的に何をしているのかを知るようにコメントを書くことをお勧めします。 Um。私はあなたが仮定しているファイル処理に関する多くの経験を持っていないので、ファイルからデータを取得することも容易になります。
ファイルを再フォーマットして、意味を簡単にしました。そうすれば、スプリットを使って '、'の間で各情報を得ることができます。
US:
San Francisco, 9874343, 543443, 193838
Los Angeles, 3900000, 52000, 22000
Baltimore, 622104, 34423, 1234
Houston, 2196000, 45444, 29393
New York City, 8500000, 54000, 27000
Philadelphia, 1510000, 654334, 21343
Boston, 6423344, 345334, 13443
Chicago, 2719000, 39000, 19282
San Diego, 1323343, 432343, 18374
Dallas, 1258000, 423343, 17363
China:
Beijing, 21500000, 32454, 23454
Hangzhouu, 9018000, 32343, 192828
Shanghia, 24500000, 432345, 23444
GuangZhou, 20800654, 323455, 298383
Wuhan, 10670000, 54344, 302344
Swatow, 5391028, 43345, 23235
Hong Kong, 7234800, 39039, 278383
Macau, 650900, 34543, 17364
Shenzhen, 10630000, 44343, 19883
Zibo, 2980000, 49383, 20009
これはデータを読み込んで都市の2次元配列に格納するために作成したクラスです。
public class CityReader {
public static void main(String[] args)
{
City[][] cities = new City[2][10];
readFileInto2D("src/Cities.txt",cities);
//User prompt on what they want to here?
print2DArray(cities);
}
public static void readFileInto2D(String filename,City[][] cities)
{
City city;
String name = "";
int population = 0;
int wage = 0;
int density = 0;
try {
Scanner scan = new Scanner(new File(filename));
String line;
String[] parsed;
//Read US:
if(scan.hasNext())
line = scan.nextLine();
//Keep track of rows
int indexer = 0;
//Keep track of columns
int indexer2 = 0;
while(scan.hasNext())
{
line = scan.nextLine();
if(line.contains("China"))
{
indexer += 1;//Go to next row
indexer2 = 0;//Start index at beginning of column.
line = scan.nextLine();//Read next line, ignore line with China.
}
parsed = line.split(", "); //This splits each line
//into an array of name,pop,wage,and density
name = parsed[0];
population = Integer.parseInt(parsed[1]);
wage = Integer.parseInt(parsed[2]);
density = Integer.parseInt(parsed[3]);
city = new City(name,population,wage,density);
cities[indexer][indexer2] = city;//Add to 2D Array.
indexer2++;
}
} catch (IOException ioe) {
// TODO Auto-generated catch block
ioe.printStackTrace();
}
}
public static void print2DArray(City[][] cities)
{
//row
for(int i = 0; i < cities.length; i++)
{
//column
for(int j = 0; j < cities[i].length;j++)
{
City city = cities[i][j];
//used getters to print information.
System.out.printf("%s %d %d %d\n",city.getName(),
city.getPopulation(),city.getWage(),
city.getDensity());
}
System.out.println();
}
}
}
これは完全ではないため、エラーチェックが行われないため、ユーザーは簡単にエラーを実装できます。これはそれを行うための一つの方法を示しています。使用される都市クラスは、コンストラクタとgetterとsetterだけで基本的です。
あなたは命の恩人ですよ、ありがとう!そして、はい、私はファイルと多次元配列については経験がありませんし、私はそれをより良くしようとしています。 –
練習メーカーが完璧!あなたは大歓迎です。再帰と、それがどのように使用され、どのように使用されるのかを詳しく調べてみてください。 – CabDude