2015-07-21 3 views
-1

В моем классе нам нужно создать программу, в которой вы можете добавить метки учащихся, а затем отсортировать их по размеру.Ошибка в ArrayList Сортировка Java

«Сортировка массива меток в порядке возрастания и отображение отсортированного массива в JTextArea».

//(This is from a private void for the "sort" button) 

// declaring variables 
    int intValuesMarks; 


    // assigning values to variables 
    intValuesMarks = Integer.parseInt(AllMarks.getText()); 
    ArrayList<Integer>arrValueList = new ArrayList<Integer>(); 
    arrValueList.add(intValuesMarks); 
    Collections.sort(arrValueList); 
    AllMarks.setText("" + arrValueList); 

Когда я пытаюсь запустить его, я получаю эту ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: " 
14 
14 
21 
42 
12" 

(цифры выше того числа I, введенных перед тем, чтобы попробовать программу)

Помощь!

спасибо.

+1

Вы пытаетесь разобрать список чисел в одном 'int'. Разделите числа и проанализируйте каждый элемент отдельно. Проверьте [здесь] (http://stackoverflow.com/questions/225337/how-do-i-split-a-string-with-any-whitespace-chars-as-delimiters) для разделения строки с использованием пробелов в качестве разделителя , Как только они разделены, вы можете перебирать каждый элемент. – CubeJockey

+0

Это потому, что «14 14 21 42 12» не является числом. Вы должны разобрать их отдельно. Вы можете, например, сначала разделите строку «String» на пробелы, а затем разберем каждую строку «String» отдельно. – Turing85

ответ

1

Ваш AllMarks.getText() фактически возвращая все метки как одна строка отделено с space.You пытались разобрать, что на целое число, поэтому вам получил исключение в числовом формате.

int intValuesMarks; 
     ArrayList<Integer>arrValueList = new ArrayList<Integer>(); 
     String str[]=AllMarks.getText().split("\\s+");//created a string array , each element in the array is the marks. 
     for (String string : str) { 
      intValuesMarks = Integer.parseInt(string); 
      arrValueList.add(intValuesMarks); 


     } 

     Collections.sort(arrValueList); 
     AllMarks.setText("" + arrValueList); 
+0

Лучше использовать '' \\ s + "' в качестве вашего регулярного выражения. См. [Здесь] (http://stackoverflow.com/questions/225337/how-do-i-split-a-string-with-any-whitespace-chars-as-delimiters) для более подробной информации. – CubeJockey

+0

Спасибо trobbins –

+1

@JishnuPrathap 'intValuesMarks = Integer.parseInt (ул),' возвращает ошибку на ' "ул"' _Incompatible типов String [] не могут быть преобразованы в String_ –

1
String str[]=AllMarks.getText().split("\\s+");//groups all white spaces as a delimiter 

здесь вы получаете строку, такую ​​как 14 14 21 42 12. поэтому он не может анализировать int. разобрать каждый из них по отдельности, разделяя это с помощью String#split(String)

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

for(int i=0;i<str.length;i++) 
{ 
    intValuesMarks = Integer.parseInt(str[i]); 

    arrValueList.add(intValuesMarks); 
} 

Collections.sort(arrValueList);//now sort your list here. 
AllMarks.setText("" + arrValueList); 
+0

Ответ только на код никогда не бывает хорошим. Было бы хорошо, если вы объясните свое решение. – Turing85

+0

уверен, что я редактирую мой вопрос. – Satya

+1

Лучше использовать '' \\ s + "' в качестве вашего регулярного выражения. См. [Здесь] (http://stackoverflow.com/questions/225337/how-do-i-split-a-string-with-any-whitespace-chars-as-delimiters) для более подробной информации. – CubeJockey

0

Вы, наверное, уже знаете, эта линия ваша проблема:

intValuesMarks = Integer.parseInt(AllMarks.getText()); 

AllMarks.getText() возвращает список целых чисел, по одному в каждой строке. Вам нужно разобрать эту строку сначала в списке или массиве строк, затем parseInt каждого из них, чтобы получить отдельные целые числа. У вас есть несколько вариантов; один из них:

String[] stringValuesMarks = AllMarks.getText().split("\n"); 

Затем перебираем stringValuesMarks, чтобы получить отдельные целые числа.

+1

It лучше использовать '' \\ s + "' в качестве вашего регулярного выражения. См. [Здесь] (http://stackoverflow.com/questions/225337/how-do-i-split-a-string-with-any-whitespace-chars-as-delimiters) для более подробной информации. – CubeJockey

+0

прохладно.Я оставляю исходный текст, чтобы другие узнали то же самое * Я * только что узнал. –

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