【问题标题】:Reading a file and storing names and numbers in two arrays读取文件并将名称和数字存储在两个数组中
【发布时间】:2017-05-28 03:16:27
【问题描述】:

我正在开发一个程序,该程序读取文件并将名称和分数存储在两个单独的数组中,但我正在努力。这就是我到目前为止所拥有的。 我为名称创建了一个数组,但我很困惑如何将名称复制到数组的每个索引中。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerReadFileSplit {
     public static void main(String[] args) {

File file = new File("NamesScore.txt");
String[] names = new String[100];
int[] scores = new int[100];
int i;

 try {
      Scanner scanner = new Scanner(file);
      while (scanner.hasNextLine()) {
         String line = scanner.nextLine();
         String [] words = line.split("\t");
         for (String word: words) {
            System.out.println(word);
         }
       }
  } catch (FileNotFoundException e) {
     e.printStackTrace();
  }
 }
}

我的文本文件是:

John James      60
Kim Parker      80
Peter Dull      70
Bruce Time      20
Steve Dam       90

【问题讨论】:

  • 什么名字?你希望我们知道这个文件是什么样子的吗?

标签: java arrays file-io java.util.scanner


【解决方案1】:

首先,您需要在声明时将i 初始化为0:

int i = 0;

然后,分割线后,您可以将数据从String[] 中提取出来,并将其放入您的names 和scores 数组中:

String [] words = line.split("\t");

// The first element in 'words' is the name
names[i] = words[0];

// The second element in 'words' is a score, but it is a String so we have
// to convert it to an integer before storing it
scores[i] = Integer.parseInt(words[1], 10);

// Increment 'i' before moving on to the next line in our file
i++;

不要忘记递增i,如上所示。

我忽略了一些错误检查。在调用split() 之后,您可能需要检查words 的长度是否为2。另外请记住,如果 Integer.parseInt() 无法将分数列中的数据解析为整数,则它可能会抛出 NumberFormatException。

【讨论】:

    【解决方案2】:

    怎么样

      int l = 0;  
      while (scanner.hasNextLine()) {
         String line = scanner.nextLine();
         String [] words = line.split("\t");
         names[l] = words[0];
         scores[l] = Integer.parseInt(words[1]);
         System.out.println(l + " - name: " + names[l] + ", score: " + scores[l]);
         l++; 
       }
    

    【讨论】:

      【解决方案3】:

      我已尝试更正您的代码,并在我认为您出错的地方提供了内联 cmets。实际上,您已经接近解决方案。尝试在像

      这样的一行代码之后弄清楚你得到了什么作为输出
      String[] words = line.split("\t");
      

      这一行将给出两个字符串(因为它会拆分文件中只有一个制表符分隔的名称和分数的行)。并且您可以尝试自己调试。就像简单地打印值一样。例如

      System.out.println(words[0]);
      

      这将帮助您进一步进步。

      希望这会有所帮助。

      import java.io.File;
      import java.io.FileNotFoundException;
      import java.util.Scanner;
      
      public class TwoArrays {
          public static void main(String[] args) {
              File file = new File("C:\\test\\textTest.txt");
              String[] names = new String[100];
              int[] scores = new int[100];
              int i = 0;
              try {
                  Scanner scanner = new Scanner(file);
                  while (scanner.hasNextLine()) {
                      String line = scanner.nextLine();
                      String[] words = line.split("\t");
                      names[i] = words[0]; // storing value in the first array
                      scores[i] = Integer.parseInt(words[1]); // storing value in the
                                                              // second array
                      i++;
                  }
                  /*
                   * This piece of code will give unnecessary values as you have
                   * selected an array of size greater than the values in the file for
                   * 
                   * for(String name: names) { 
                   *      System.out.println("Name:- "+name);
                   * }
                   * for(int score: scores) { 
                   *      System.out.println("Score:- "+score);
                   *  }
                   */
                  // Better use the below way, here i am restricting the iteration till i
                  // i is actually the count of lines your file have.
                  for (int j = 0; j < i; j++) {
                      System.out.println("Name:- " + names[j] + "\t" + "Score:- " + scores[j]);
                  }
      
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多