【问题标题】:Parsing Information From a File从文件中解析信息
【发布时间】:2017-04-17 00:09:21
【问题描述】:

我正在尝试从文件中读取信息,以便使用 Java 创建图表。我有下面的代码,但是,运行后输出为空。

该文件提供类似于以下的信息

3

肯塔基佛罗里达阿拉巴马

...

...

其中 3 是图中顶点的数量,下一行中的 3 个位置是这些顶点。我正在努力找出导致空输出的原因。

public class ReadGraph {
  static int vertNum = 0;
  static String[] output;

  public static String[] readVertices(Scanner fileIn) throws FileNotFoundException {
    fileIn = new Scanner(new File("input.txt"));
    vertNum = fileIn.nextInt();
    output = new String[vertNum];
    for (int i = 0; i < vertNum - 1; i++) {
        output[i] = fileIn.next();
    }
    Arrays.sort(output);
    fileIn.close();
    return output;
   }
}

此时输出应该是按字母顺序排列的位置列表。任何帮助将不胜感激。

【问题讨论】:

  • 一步一步调试,找出哪一行没有做你认为应该做的事情。
  • 为什么你的方法readVertices()Scanner 作为参数,然后立即创建new Scanner()
  • for (int i = 0; i &lt; vertNum - 1; i++) 应该是 for(int i=0 ; i&lt;vertNum ; i++)
  • @domdom 因为我不确定如何在不创建新扫描仪的情况下让它从文件中读取。

标签: java file parsing java.util.scanner


【解决方案1】:

fileIn 对象读取第一行时,它找到了数字3,使用这个值你正在初始化output 数组,在循环中你减去一个(vertNum - 1),所以当@ 987654325@尝试排序,没有找到完整的数组,只有2个元素所以抛出异常。为避免此异常,您不应在循环中减去一个元素,例如:

for (int i = 0; i < vertNum; i++) {
    output[i] = fileIn.next();
}

更新: 完整示例:

public class ReadGraph {
    static int vertNum = 0;
    static String[] output;

    public static void main(String[] args) throws FileNotFoundException {
        Scanner fileIn = null;
        for (String s : readVertices(fileIn)) {
            System.out.println(s);
        }
    }

    public static String[] readVertices(Scanner fileIn) throws FileNotFoundException {
        fileIn = new Scanner(new File("input.txt"));
        vertNum = fileIn.nextInt();
        output = new String[vertNum];
        for (int i = 0; i < vertNum; i++) {
            output[i] = fileIn.next();
        }
        Arrays.sort(output);
        fileIn.close();
        return output;
    }
}

输出:

Alabama
Florida
Kentucky

【讨论】:

  • 这并不能解决问题。输出数组仍为 null。
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
相关资源
最近更新 更多