2015-09-22 1 views
2

Я пытаюсь собрать пользовательские входы и отсортировать их после ввода «bye». Однако я не понимаю, как выполнить «до свидания». Вот что я до сих пор. Может кто-то объяснить, почему я не могу добавить nextLine() вместо nextInt() и изменить вещи на строки. Тогда я мог бы вырваться из инструкции while со строкой «bye», но до сих пор ни один из них не работал для меня.Соберите пользовательские входы в массиве и печати, отсортированные по Java

import java.util.*; 

public class Work { 
    public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    int[] values = new int[1]; 
    int currentSize = 0; 
    System.out.print("Type a number "); 
    while(s.hasNextInt()) 
    { 
     if(currentSize >= values.length) 
     { 
     values = Arrays.copyOf(values, values.length + 1); 
     } 
     System.out.print("Type: "); 
     values[currentSize] = s.nextInt(); 
     currentSize++; 
     Arrays.sort(values); 
     System.out.print(Arrays.toString(values)); 
    } 

    } 
} 
+1

Как насчет того, чтобы использовать условие типа input равно -1 или аналогично, или сначала попросите количество элементов, чтобы вы не воссоздавали массив каждый раз внутри цикла while? –

+0

Вы должны опубликовать свой нерабочий код (тот, который использует строки) –

+0

Обратите внимание, что ваш вектор значений имеет только одно значение, доступное, как определено только с одним элементом. –

ответ

2

Может кто-то объяснить, почему я не могу добавить nextLine() вместо nextInt() и изменить положение вещей в строки.

Вы можете просто обработать конверсии.

String input = null; 
while(!"bye".equalsIgnoreCase(input)) 
{ 
    value = Integer.parseInt(input.trim()); 

    //..do stuff with the int value 

    input = s.nextLine(); 
} 

Вам может понадобиться обрабатывать NumberFormatException, если вы не хотите верить, что пользователь будет вводить цифры.

+0

Да, но как вы справляетесь с тем случаем, когда входные данные равны? – user3089457

+0

Когда пользователь вводит «bye», цикл выходит. Разве это не то, что вы хотите? «Обрабатывать дело» будет любой код после цикла. –

0

Ну, ответ, отправленный Джеймсом, уместен!

Хотя, если вы хотите выйти из цикла, когда пользователь вводит «bye» и использует nextLine(), то вот еще одно решение.

public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    int[] values = new int[1]; 
    int currentSize = 0; 
    System.out.print("Type a number "); 

    while (s.hasNext()) { 

     // assign it to local var 
     String input = s.nextLine(); 

     // check for bye 
     if (!input.equalsIgnoreCase("bye")) { 
      if (currentSize >= values.length) { 
       values = Arrays.copyOf(values, values.length + 1); 
      } 
      System.out.print("Type: "); 
      // add the input value. 
      values[currentSize] = Integer.parseInt(input.trim()); 
      currentSize++; 
      Arrays.sort(values); 
      System.out.print(Arrays.toString(values)); 
     } else { 
      System.out.println("exiting..."); 
      System.exit(1); 
     } 
    } 
} 

Это добавление некоторого разветвления в код для сравнения строк ввода пользователем с использованием цикла if-else.
Надеюсь, это поможет!

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