将字符串数组转换为整数数组后,该函数返回一个空数组

时间:2015-03-22 11:28:36

标签: java arrays parsing

在将字符串解析为整数数组后,函数convertStringArray不返回整数数组。     而是返回一个null数组。该函数应将字符串转换为整数并返回readCodefile函数。     readCode文件函数将一个整数数组返回给main函数。     需要帮助。

package subsetsum;

import java.util.Scanner;
import java.io.*;

class filehandling {

    String [] codes = new String[100000];
    int i = 0;

    private Scanner readCodes;

    public int[] readCodesFile() {
        try {
            readCodes = new Scanner(new File("uk.txt")); //Reading File
            codes[i] = readCodes.nextLine();
            //System.out.println(codes[i]);
            i++;
            while(readCodes.hasNext()) {
                codes[i] = readCodes.nextLine();
                //System.out.println(codes[i]);
                i++;
            }
        } 

        catch (Exception e) {
            System.out.println("Could not locate the data file!");
        }

        int intCode1 [] = convertStringArray(codes);
        return intCode1;
    }

    public int[] readCodesFile1() {
        try {
            readCodes = new Scanner(new File("uk2`enter code here`.txt"));
            codes[i] = readCodes.nextLine();
            //System.out.println(codes[i]);
            i++;
            while(readCodes.hasNext()) {
                codes[i] = readCodes.nextLine();
                //System.out.println(codes[i]);
                i++;
            }
        } 

        catch (Exception e) {
            System.out.println("Could not locate the data file!");
        }

        int intCode2 [] = convertStringArray(codes);
        return intCode2; // Here is where the error takes place
        }

    public int[] convertStringArray(String[] codes) {
        int[] intCodes = new int[codes.length];
        int count = 0;
        for (String string : codes) {
            intCodes[count] = Integer.parseInt(string);
            //System.out.println(intCodes[count]);
            count++;
        }
        //System.out.println(intCodes[i]);
        return intCodes;
    }
}

2 个答案:

答案 0 :(得分:0)

看起来您的代码最有可能抛出NumberFormatException,因为您的convertStringArray方法传递了100000字符串的字符串数组,所以如果你实际上没有从输入文件中读取100000个字符串,codes数组中的某些字符串将保持null,而parseInt将无法解析它们。

您应该使用ArrayList而不是数组来从文件中读取字符串,除非您知道要在输入文件中找到的字符串的确切数量。

答案 1 :(得分:0)

convertStringArray方法可能没错。但是你不应该创建具有大的固定大小的字符串数组并迭代它。尝试这样的事情:

package com.company;

import java.util.ArrayList;
import java.util.List;

public class Main {

  public static int[] convertStringArray(List<String> codes) {
      int[] intCodes = new int[codes.size()];
      int count = 0;
      for (String string : codes) {
          intCodes[count] = Integer.parseInt(string);
          count++;
      }
      return intCodes;
  }

  public static List<String> readStrings() {
      List<String> out = new ArrayList<String>();
      out.add("1");
      out.add("2");
      out.add("3");
      return out;
  }

  public static void main(String[] args) {
      int[] intCodes = convertStringArray(readStrings());

      for (int intCode : intCodes) {
          System.out.println(intCode);
      }

  }
}