2017-01-15 6 views
-2

Пытается создать программу, которая использует частично заполненный массив. Начало кода связано с получением пользователем ввода для размера массива и получением их для ввода значения, которое должно быть помещено в массив. Затем я хочу, чтобы значения были отсортированы по мере их ввода.Программа частично заполненных массивов завершает раннее время выполнения

public static void main(String[] args) 
{ 
    int userInput; 
    int[] userArray; 
    int numElements; 
    int index; 
    Scanner keyboard = new Scanner(System.in); 

    System.out.print("Enter number of values in array (5 to 10): "); 
    userInput = keyboard.nextInt(); 

    while (userInput < 5 || userInput > 10) 
     { 
      System.out.print("Enter number of values in array (5 to 10): "); 
      userInput = keyboard.nextInt(); 
     } 

    System.out.println(); //Space, for neatness 

    userArray = new int[userInput]; 

    for (int item: userArray) 
     System.out.print(item + " "); 

    System.out.print("\nEnter an integer value: "); 
    userInput = keyboard.nextInt(); 


     int numElements = 0; 
     int index = 0; 
     if (numElements == userArray.length - 1) 
      System.out.println("The array is full."); 
     else 
     { 
      while (index < numElements && userArray[index] < userInput) 
      { 

       if (userArray[index] != 0) //Shift the array to the right, and add value at the current index as to not overwrite values. 
       { 
        for (int i = numElements; i > index; i--) 
         userArray[i] = userArray[i - 1]; 

        userArray[index] = userInput; 
       } 

       userArray[index] = userInput; 
       index++; 
       numElements++; 

       System.out.print("Updated array: "); 
       for (int item: userArray) 
        System.out.print(item + " "); 

       System.out.println("\nEnter an integer value: "); 
       userInput = keyboard.nextInt(); 
      } 
     } 
} 

Проблемы с выходом. После ввода значения программа завершается. Например (я печатаю пустой массив специально):

Enter number of values in array (5 to 10): 5 

0 0 0 0 0 
Enter an integer value: 5 

Извините за недостаток комментариев.

+0

Пожалуйста, вставьте полный код. –

ответ

1

Эта часть вашего заявления всегда ЛОЖНО!

index < numElements 

индекс и numElements оба являются изначально. Таким образом, ваш цикл while просто пропускается и выполняется.

+0

Спасибо, что это правда, любая идея, как я могу двигаться по массиву с циклом while? Я пытаюсь найти следующее место для элемента. Здесь следующий элемент больше, чем тот, который я хочу добавить. – grant2088

0

попытка заменить последнюю часть кода этим:

 int numElements = 0; 

    while (numElements < userArray.length) { 

     System.out.print("\nEnter an integer value: "); 
     userInput = keyboard.nextInt(); 
     //insert into the first column 
     userArray[0] = userInput; 

     // order the table 
      for (int i=0 ;i<=(userArray.length-2);i++) 
        for (int j=(userArray.length-1);i < j;j--) 
          if (userArray[j] < userArray[j-1]) 
          { 
            int x=userArray[j-1]; 
            userArray[j-1]=userArray[j]; 
            userArray[j]=x; 
          } 
     numElements++; 
    } 

      System.out.print("Updated array: "); 
      for (int item: userArray) 
       System.out.print(item + " "); 

      System.out.println("\nEnter an integer value: "); 
      userInput = keyboard.nextInt(); 

     System.out.println("The array is full.");