2016-02-17 2 views
0

У меня есть следующая программа, где я пытаюсь реализовать вставки рода для сортировки массива строк:Вставки рода сбой при попытке отсортировать массив строк

import java.util.Scanner; 

    public class InsertionSort { 
     public static Scanner console = new Scanner(System.in); 

     public static void main(String[] args) { 
      System.out.print("How long do you want your array to be? "); 
      int arraySize = console.nextInt(); 
      String a[] = arrayOfStrings(arraySize); 
      System.out.println("Here is the sorted data: "); 
      **insert(a, arraySize);** 


     } 

     public static String[] arrayOfStrings(int size) { 
      String a[] = new String[size]; 
      int i = 0; 

      do { 
       System.out.print("Input a string: "); 
       String input = console.next(); 

       input = a[i]; 
       i++; 

      } while(i < size); 

      return a; 
     } 

     public static void insert(String[] a, int size) { 
      **String temp = a[size];** 
      int j = size - 1; 

      while (j >= 0 && a[j].compareToIgnoreCase(temp) > 0) { 
       a[j + 1] = a[j]; 
       j--; 
      } 
      a[j + 1] = temp; 
     } 
    } 

Когда я запускаю программу, он выходит из строя полностью , Я получаю исключение за пределы по строкам, помеченным звездочками, и некоторые ошибки «NativeMethodAccessorImpl». Я уверен, что проблема в моем сортировке вставки, но я не могу понять, где и почему именно потому, что ошибка вне границ не имеет смысла для меня. Я пытаюсь сортировать строки, заданные пользователем, и помещать их в алфавитном порядке из a-z.

+2

Массивы в Java являются 0-индексированные (т.е. они идут от 0 до размера-1), так что вы можете» t законным доступом к массиву с индексом его размера. – azurefrog

+0

https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html – zerocool

ответ

1

Попробуйте написать свой метод как это:

public static void insert(String[] a) { 
    String temp = a[a.length-1]; 
    int j = a.length - 1; 
1

вы получаете сообщение об ошибке, потому что размер всегда 1 больше, чем количество элементов в массиве. Поэтому вы должны subract 1 от размера

Здесь

**insert(a, arraySize - 1);** 

или Здесь

int j = size - 1; 
**String temp = a[j];** 
Смежные вопросы