2017-04-19 115 views
-3

我正在处理TSP问题,我要读取我的国家城市的xy坐标,但是当我尝试这样做时,我遇到了一个数组越界异常,我想要将x坐标转换为数组和y坐标转换为其他任何想法,谢谢。 包tsp;读取一个csv文件到阵列

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

public class tsp { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String [] arr = new String[4000000]; 
     String fileName = "EG - Copy1.csv"; 
     File file = new File(fileName); 
     try { 
      @SuppressWarnings("resource") 
      Scanner inputStream = new Scanner(file); 
      while(true){ 
       String xcoord = inputStream.next(); 
       arr = xcoord.split(","); 
       double op = Double.parseDouble(arr[0]); 
       double opy = Double.parseDouble(arr[1]); 
       System.out.println(op+"****"+opy); 
      } 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 
+1

*好奇:*新字符串[4000000]是什么意思? – Andreas

+0

您没有显示文件内容,但代码会指示它只包含坐标。你确定文件**中没有**城市名称吗?你知道,有空格和无逗号的名字会完全破坏你的阅读逻辑,因为'纽约'是'xcoord'的两个值,'New'和'York'的值的'split(',')'会失败当你做'arr [1]'时。 – Andreas

+0

避免文件名中有空格。 – Chip

回答

0

如果语句xcoord.split(",")没有找到一个逗号返回一个元素的数组。

当您尝试从arr[1]读取数据时,后者会引发数组越界异常。

顺便说一句,那就是你分配一个这么大的阵列一文不值:

String [] arr = new String[4000000]; 

因为语句xcoord.split(",")每次重新分配给arr一个新的数组。

0

您的文件有一些行格式不正确。您可以按照以下步骤更改代码,以仅处理格式良好的行。

 try { 
      @SuppressWarnings("resource") 
      Scanner sc = new Scanner(file); 
      String [] arr; 
      while(sc.hasNextLine()){ 
       String xcoord = inputStream.nextLine(); 
       arr = xcoord.split(","); 
       if (arr.length == 2) { 
        double op = Double.parseDouble(arr[0]); 
        double opy = Double.parseDouble(arr[1]); 
        System.out.println(op+"****"+opy); 
       } 
      } 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
+0

为什么'arr'应该为空? – freedev

+0

是的你是对的。 arr不能为空 – MigSena

+0

但是当我修改我的代码时,我得到了另一个异常“线程中的异常”main“java.util.NoSuchElementException”@MigSena – ziadx123