2017-04-19 113 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