2013-11-07 2 views
1

У меня есть текстовый файл со следующим:Добавление номеров в массив со сканера

10/23/2013 47 34 23 31 03 13 
10/19/2013 33 09 56 54 57 05 
10/16/2013 03 42 26 34 28 27 
10/12/2013 10 58 26 57 08 04 

Я был в состоянии использовать сканер и добавить даты к ArrayList «ДАТА» и я добавил остальные цифры другому ArrayList «NUM» (см код)

Я пытаюсь построить ArrayList> «MAIN» или даже HashMap, который будет содержать каждую строку в качестве индекса следующим образом:

MAIN [[47,34 , 23,31,03,13], [33,09,56,54,57,05], [03,42,26,34,28,27], [10,58,26,57,08,04 ]]

Мне не удалось получить желаемый результат, используя мой код ниже, и мне нужна помощь в реструктуризации кода, чтобы получить нужный результат.

Спасибо.

public class Grades { 

static String line; 
static BufferedReader reader; 

static String file = "file/Grades.txt"; 

static ArrayList<ArrayList<String>> MAIN; 
static ArrayList<String> NUM ; 

static ArrayList<String> DATE ; 
static ArrayList rand; 

static int index = 0; 

public static void main(String args[]) { 

    MAIN = new ArrayList<ArrayList<String>>(); 
    //lotoNum(); 



    DATE = new ArrayList<String>(); 



try { 
    Scanner scan = new Scanner(new BufferedReader(new FileReader(file))); 

    wwhile(scan.hasNextLine()){ 
     NUM = new ArrayList<String>(); 

     String token = scan.nextLine(); 
     String [] line = token.split(" "); 


      DATE.add(line[0]); 

      for (int i = 1; i < line.length; i++){ 
       NUM.add(line[i]); 
      } 
      MAIN.add(index, NUM); 
       index++; 


       System.out.println(MAIN); 

       //NUM.clear(); 
       //NUM.trimToSize(); 


     } 


     } 

    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

} 
} 

выхода:
[[47, 34, 23, 31, 03, 13]]
[[47, 34, 23, 31, 03, 13], [33, 09, 56 , 54, 57, 05]]
[[47, 34, 23, 31, 03, 13], [33, 09, 56, 54, 57, 05], [03, 42, 26, 34, 28, 27]]
[[47, 34, 23, 31, 03, 13], [33, 09, 56, 54, 57, 05], [03, 42, 26, 34, 28, 27], [10 , 58, 26, 57, 08, 04]]

+0

Можете ли вы указать как желаемый результат, так и фактический результат? – Wold

ответ

0

Попробуйте

int index = 0; 

while (scan.hasNextLine()){ 
    String line = scan.nextLine(); 
    String[] tokens = line.split(" "); 

    // you must create a new list everytime or else they will 
    // reference the same object. That's why you're getting the output. 
    // you are. Also delete the declareation outside of this loop 
    // ArrayList<String> NUM; ---- NUM = new ArrayLis<String>(); 

    ArrayList<String> NUM = new ArrayLis<String>(); 

    DATE.add(tokens[0]); 

    for (int i = 1; i < tokens.length; i++){ 
     NUM.add(tokens[i]); 
    } 

    MAIN.add(index, NUM); 
    index++; 

    System.out.println(MAIN); 

    NUM.clear(); 


} 
+0

Я сделал, но в результате получилось: [[10/23/2013,, 47,, 34,, 23,, 31,, 03,, 13, 10/19/2013,, 33,, 09,, 56,, 54, 57, 05], [10/23/2013, 47, 34, 23, 31, 03, 13, 10/19/2013, 33, 09, 56, 54,, 57, 05]] – user2510952

+0

Я изменил int = 0 на int = 1 in for loop, чтобы удалить дату и добавил дополнительное пространство в split (""); для удаления дополнительной запятой, и это результат: [[47, 34, 23, 31, 03, 13, 33, 09, 56, 54, 57, 05], [47, 34, 23, 31, 03, 13, 33, 09, 56, 54, 57, 05]] – user2510952

+0

Редактировать сообщение, чтобы добавить код, который у вас есть. Я не знаю, почему вы читаете две строки. –

Смежные вопросы