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

ファイルの内容は表示されませんでしたが、コードには座標だけが含まれていることが示されます。ファイル**に**都市名もないのは確かですか? 「New York」は2つの「xcoord」値であり、「New」と「York」の値にはsplit( "split"、 ")が失敗するため、読み書きロジックを完全に破棄するスペースとカンマなしの名前あなたが 'arr [1]'をしたとき。 – Andreas

+0

ファイル名にスペースは入れないでください。 – Chip

答えて

0

声明xcoord.split(",")はコンマは一つの要素の配列を返す見つからない場合。

この後者は、arr[1]から読み取ろうとすると、範囲外の例外を発生させます。

ところで、それはあなたがとても大きな配列を割り当てる何も価値がある:文xcoord.split(",")新しいアレイにarrにするたびに再割り当てするので

String [] arr = new String[4000000]; 

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'はnullになるのですか? – freedev

+0

はい、あなたは正しいです。 arrはnullではありません – MigSena

+0

しかし、私は自分のコードを変更するときに別の例外が発生しました。 "スレッド内の例外" main "java.util.NoSuchElementException" @MigSena – ziadx123

関連する問題