Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: что это значит:java.lang.ArrayIndexOutOfBoundsException:-1 ?  (Прочитано 34513 раз)
0 Пользователей и 1 Гость смотрят эту тему.
jackson
Участник

ua
Offline Offline

« : 28-03-2012 17:56 » 

вот код программы,которая по идее должна выводить строки в порядке возрастания:
Код:
import java.util.Scanner;

public class string {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Scanner scan=new Scanner(System.in);

        System.out.println("Введите строку №1:");

        //BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));

        String str1=scan.next();

        System.out.println("str1:"+str1+'\n'+"Длина строки:"+str1.length());

        System.out.println("Введите строку №2:");

        String str2=scan.next();

        System.out.println("str2:"+str2+'\n'+"Длина строки:"+str2.length());

        System.out.println("Введите строку №3:");

        String str3=scan.next();

        System.out.println("str3:"+str3+'\n'+"Длина строки:"+str3.length());

        String array[]={str1,str2,str3};

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

            if (array[i-1].length()<array[i].length()){

            String y=array[i-1];

            array[i-1]=array[i];

            array[i]=y;

            

        }

            System.out.println(array.length);

            

        }

    }
 

}
но компилятор выдаёт Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at string.main(string.java:24)
как эту ошибку исправить?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 28-03-2012 18:16 » 

jackson, сколько я понимаю, ты не перехватываешь данную исключительную ситуацию, а main не может быть "нагружен" необрабатываемыми исключениями.

Нужно обернуть то место (24-я строчка?), где возможно возникновение этого исключения, в конструкцию try...catch.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 28-03-2012 19:05 » 

В дополнение к уже сказанному: характер исключения как бы намекает, что при i=0 брать элемент array[i-1] - несколько легкомысленно.
Записан
jackson
Участник

ua
Offline Offline

« Ответ #3 : 28-03-2012 19:38 » 

спасибо за отзывы)я понял свою ошибку и исправил)
Код:
import java.util.Scanner;
public class string {
private static void swap(String[]array, int j, int i) {
String y = array[i];
     array[i] = array[j];
    array[j] = y;                   
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner scan=new Scanner(System.in);
System.out.println("Введите строку №1:");
String str1=scan.next();
System.out.println("str1:"+str1+'\n'+"Длина строки:"+str1.length());
System.out.println("Введите строку №2:");
String str2=scan.next();
System.out.println("str2:"+str2+'\n'+"Длина строки:"+str2.length());
System.out.println("Введите строку №3:");
String str3=scan.next();
System.out.println("str3:"+str3+'\n'+"Длина строки:"+str3.length());
String[]array={str1,str2,str3};
System.out.println("Упорядоченый вывод:");
         
for(int i=array.length-1;i>=0;i--){   

for(int j=0;j<i;j++) {
int cmp = array[ j ].compareTo( array[ j + 1 ] ); // compareToIgnoreCase()
if ( cmp < 0 ) swap(  array, j, j + 1 );

      }             

       System.out.println(array[i]);

           }   
   

}

}
вообще всё работает и прога выводит строки в упорядоченном порядке,но только в том случае,если строки небольшие; стоит мне ввести большие строки(от сорока символов),как алгоритм отказывается работать
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 28-03-2012 20:23 » 

И как это выглядит? (неправильная работа)
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
jackson
Участник

ua
Offline Offline

« Ответ #5 : 28-03-2012 21:02 » 

вот так:
Код:
Введите строку №1:
ghsdfhgjkoshgsouihguiorhtuiohweoruthiorhuiest
str1:ghsdfhgjkoshgsouihguiorhtuiohweoruthiorhuiest
Длина строки:45
Введите строку №2:
rthurhtuiheriothuiowerhtuwerotwerityeurt
str2:rthurhtuiheriothuiowerhtuwerotwerityeurt
Длина строки:40
Введите строку №3:
ruthewurthueiowrthuioewrthuioewrthuioretheruthwerothowerthrtoh
str3:ruthewurthueiowrthuioewrthuioewrthuioretheruthwerothowerthrtoh
Длина строки:62
Упорядоченый вывод:
ghsdfhgjkoshgsouihguiorhtuiohweoruthiorhuiest
rthurhtuiheriothuiowerhtuwerotwerityeurt
ruthewurthueiowrthuioewrthuioewrthuioretheruthwerothowerthrtoh
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 29-03-2012 06:42 » 

jackson, а что возвращает compareTo для 2-й и 3-й строк?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines