我查看了所有链接,似乎无法得到我想要的东西。我有一个我需要阅读的文本文件。首先是文本文件格式:
3 STL NY Chi //all on one line
STL NY 575 //on its own line
NY Chi 550 //on its own line
STL Chi 225 //on its own line
我需要将int读入int变量,比方说我们称之为count。然后将同一行上的实际城市变成一个数组。接下来的行需要读入一个数组,里程与数组相关联,例如[STL NY] = 575。我只能使用数组。没有哈希表,列表,堆栈或队列。这是我到目前为止所说的,老实说它并不多。我真的可以使用一些帮助,因为我对#34; howto"对此。
import java.io.*;
import java.util.*;
public class P3 {
/**
* @param args the command line arguments
*/
public static int count;
public static void main(String[] args) {
try {
FileInputStream dataFile = new FileInputStream("Data.txt");
//BufferedReader br = new BufferedReader(new InputStreamReader(dataFile));
String line = br.readLine();
}
catch (IOException e) {
System.err.println ("Unable to open file");
System.exit(-1);
}
}
}
我想我到了那里,但我得到的错误代码是:"无法从静态上下文中引用非静态变量城市。"我试图通过打印来测试我的代码。有人可以帮我这个印刷吗?我想看看数组中的内容,以确保我正确地做到了。这是我的代码:
package p3;
import java.io.*;
import java.util.*;
class citiesDist {
String cityOne;
String cityTwo;
int miles;
}
class city {
String cityName;
int numberLinks;
citiesDist[] citiesDists;
}
public class P3 {
city[] cities;
void initCity(int len) {
for (int i = 0; i < len; i++) {
cities[i] = new city();
}
}
void initCitiesDist (int index, int len) {
for (int i = 0; i < len; i++) {
cities[index].citiesDists[i] = new citiesDist();
}
}
void parseFile() throws FileNotFoundException, IOException {
FileInputStream fstream = new FileInputStream("Data.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
int numberCities = Integer.parseInt(br.readLine());
cities = new city[numberCities];
initCity(numberCities);
for (int i = 0; i < numberCities; i++) {
String line = br.readLine();
int numberLink = Integer.parseInt(line.split(" ")[1]);
cities[i].cityName = line.split(" ")[0];
cities[i].numberLinks = numberLink;
initCitiesDist (i, numberLink);
for (int j = 0; j < numberLink; j++){
line = br.readLine();
cities[i].citiesDists[j].cityOne = line.split(" ")[0];
cities[i].citiesDists[j].cityTwo = line.split(" ")[1];
cities[i].citiesDists[j].miles = Integer.parseInt(line.split(" ")[2]);
}
}
}
public static void main(String args[]) {
System.out.println("city" + cities.city);
}
}
答案 0 :(得分:1)
如果您对代码感到困惑,请不要考虑编程语言;它只会进一步混淆你的逻辑。 (将算法与语言分开。)当您清楚地知道要完成什么时,请添加您的语言(在“我如何完成此特定任务?”)。< / p>
根据您的设计,您的目标是制作一个与每个城市之间的距离相关的图表。它看起来像这样:
[STL][NY] [Chi]
[STL][0] [575][25]
[NY] [575][0] [550]
[Chi][25] [550][0]
就文件输入和Scanner
类而言,这并不是非常难以实现。
您必须提取图表的尺寸(3乘3)。这是在输入文件的第一行提供的。获取Scanner
中带有File
的整数并不太难,只需确保导入了正确的类,以及正确的错误处理(try...catch
或抛出异常)。
Scanner sc = new Scanner(new File("input.txt"));
你需要两个阵列 - 一个用于城市,一个用于距离本身。我们不知道它们有多大(你从不假设文件中的数据,你只是假设数据的形式),所以我们必须从文件本身获取它。幸运的是,我们给出了一个整数,然后是城市本身。我们将读取此整数一次,并在多个不同的位置使用它。
String[] cities = new String[sc.nextInt()];
int[][] distances = new int[cities.length][cities.length];
for(int i = 0; i < cities.length; i++) {
// Surely there's a method in Scanner that returns String that reads the _next_ token...
}
您现在已经设置了数据结构并准备好了。你需要做的是弥合城市数组和距离数组之间的差距。考虑它们到达文件的顺序,以及我们遇到它们的顺序。你会得到一些方法或方法来回答这个问题,“首先是STL还是纽约?”
给它一个旋转,看看你是否可以进一步。