2014-10-13 3 views
0

Я пытаюсь сохранить ввод пользователя в ArrayList из ArrayList.Java ArrayList of ArrayList Scanner UserInput

ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 

Например, хранить его в качестве [[1,2,3],[4,5],[6,1,8]]
Ниже мой код,

Scanner input = new Scanner(System.in); 
    System.out.println("Enter a set of numbers:"); 
    String line = input.nextLine(); 
    String[] numbers = line.split(" +"); 

    ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 
    ArrayList<Integer> a1 = new ArrayList<Integer>(); 

    for(int i=0; i<numbers.length; i++) { 
     a1.add(new Integer(numbers[i])); 

    } 
    a.add(a1); 

Но тогда, когда типы I его к терминалу, он становится [[1,2,3,4,5,6,1,8]].
Спасибо заранее!

+1

Как же вы вводите цифры? Я хочу сказать, где вы использовали '+'? –

+0

Вы создали два объекта ArrayList. Какой другой результат вы ожидаете? – Voicu

+1

Просьба представить подробную информацию о вашем вводе. вы закодированы только для одного ArrayList. –

ответ

1

Из вышеприведенных замечаний я немного ясно, что вы хотите сделать.

Вы ввели 1 2 3 4 5 6 1 8 на терминале. В вашей программе вы использовали split на -, поэтому я предоставляю некоторые рекомендации для решения вашей проблемы.

Во-первых, разделить ваш вход на -, чтобы сделать разделение массивов

String[] numbersArray = line.split("-"); 
//e.g. input 1 2 3 + 4 5 6 + 1 8 
//here you will get numbersArray as [1 2 3,4 5 6,1 8] 
ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 

Теперь, чтобы отделить отдельные элементы внутреннего использования массива для цикла

for(int i=0; i<numbersArray.length; i++) { 

    String[] numbers= numbersArray[i].split(" "); //split on " " 
    //here you will get [1,2,3] for first iteration and 2nd [4,5,6], last [1,8] 

    ArrayList<Integer> a1 = new ArrayList<Integer>(); 
    for(int j=0; j<numbers.length; j++) { 
     a1.add(new Integer(numbers[j])); 
     //here adding inner array list elements 

    } 
    //add to main array list 
    a.add(a1); 
} 
+0

Однако, когда я пытаюсь использовать ваш метод, входя в терминал, например '1 2 3 + 4 5 6 + 1 8', я получил ошибку выполнения с' NumberFormatException'. не совсем уверен, почему ты. – user2875021

+1

Я понял это. Вместо использования '(" + ")', я использовал '(" - ")' и работает как шарм. – user2875021

+0

@ user2875021: Отлично. Хорошо видеть, что вы решили проблему. SO всегда помогает вам. –

0

Я думаю, что это из-за неправильного ввода, который вы пытаетесь ввести на консоль, потому что, когда я жестко кодирую идеальный вход в ваш ArrayList, он печатает результат, как вы ожидали. Вот пример кода, который я написал:

private static void doPrint(){ 
    List<List<Integer>> sample=new ArrayList<List<Integer>>(); 
    ArrayList<Integer> a1 = new ArrayList<Integer>(); 
    a1.add(12); 
    a1.add(23); 
    ArrayList<Integer> a2 = new ArrayList<Integer>(); 
    a2.add(22); 
    a2.add(28); 
    sample.add(a1); 
    sample.add(a2); 

    System.out.println(sample); 
} 

и вот результат:

[[12, 23], [22, 28]] 
0

, как вы пытаетесь использовать, не будет работать, так как вы добавите все элементы внутреннего списка.

Вы можете попробовать что-то вроде следующего. Вам необходимо создать следующие массивы.

public static void main(String[] args) { 
    ArrayList<ArrayList<Integer>> a = new ArrayList<>(); 
    int[] arr1={1,2,3}; // you need to create these arrays 
    int[] arr2={4,5}; 
    int[] arr3={6,1,8}; 
    a.add(getList(arr1)); 
    a.add(getList(arr2)); 
    a.add(getList(arr3)); 
    System.out.println(a); 
} 

public static ArrayList<Integer> getList(int[] arr){ 
    ArrayList<Integer> list = new ArrayList<>(); 
    for (int anArr : arr) { 
     list.add(anArr); 
    } 
    return list; 
} 
1

Попробуйте этот тип i/p и код ниже.

i/p : 1 2 3-4 5-6 1 8 

String[] list= line.split("-"); 

ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 
for(int i=0; i<list.length; i++) { 

     String[] number= line.split(" "); 
     ArrayList<Integer> a1 = new ArrayList<Integer>(); 
     for(int i=0; i<numbers.length; i++) { 
      a1.add(new Integer(numbers[i])); 

     } 
     if(a1.length>0) 
      a.add(a1); 
} 
+0

Этот метод отлично работает! – user2875021

0

Вы добавляете только один список для a, поэтому кажется, что один из элементов внутри списка a. Если вы хотите иметь несколько элементов внутри списка a, то используйте вот так.

for(int i=0; i<numbers.length; i++) { 
     a1.add(new Integer(numbers[i])); 
} 
a.add(a1); 
a.add(a1); 

Выход: В соответствии с принятым входом в вашем вопросе

[[1,2,3,4,5,6,1,8], [1,2,3,4,5,6,1,8]]