Задача: Пользователь вводит с клавиатуры список слов (и чисел). Слова вывести в возрастающем порядке, числа - в убывающем. Пример ввода (каждый элемент с новой строки): Вишня, 1, Боб, 3, Яблоко, 22, 0, Арбуз Пример вывода(каждый элемент с новой строки): Арбуз, 22, Боб, 3, Вишня, 1, 0,Яблоко 1й подход - и внутренний цикл тоже перебирает весь массив (работает) :
public static void sort(String[] array) {
    for (int i = 0; i < array.length; i++) {     // весь цикл
        String temp = "";

        if (isNumber(array[i])) {                // если элемент это число,
            for (int k = 0; k < array.length; k++) {
                if (isNumber(array[k])) {       // то сравнить со следующими числами
            и переставить по необходимости, и такая же операция со словами
2й подход - внутр. цикл пытается найти следующего кандидата того же типа. это работает для слов, но выходит за массив для чисел...где-то, как-то ))
public static void sort(String[] array) {
 String temp=""; boolean foundNextWord=false; boolean foundNextNum=false;

  for (int j=array.length-1; j>0; j--) {   // сортировка пузырьком внешний цикл
    for (int i = 0; i < j; i++) {               // сортировка пузырьком внутренний цикл

     if (!isNumber(array[i])) {           // если элемент это слово, то
        int k = i + 1;                          // начиная со след. элемента
                               // ищем следующий элемент слово
        while (true) {
                if (!isNumber(array[k])) { foundNextWord = true;  break; }
                if (k == array.length) { break; }
                k++;
        }
        if (foundNextWord) {
           if (isGreaterThan(array[i], array[k])) {                // сравниваем и переставляем
              temp = array[i]; array[i] = array[k]; array[k] = temp; foundNextWord = false;
            }
         }
     } else  if (isNumber(array[i])) {        // если элемент это число, то
       int n = i + 1;                  // начиная со след. элемента

     while (true) {           // ищем следующий элемент число
        if (isNumber(array[n])) {          //здесь получаем ArrayIndexOutOfBoundsException
          foundNextNum = true;  break; }  //но не понятно почему: в сортирке слов Exception_а нет
          if (n == array.length) {break; }
          n++;   // и т.к. j=array.length-1; и i < j - не ясно как n = i+1; - выходит за массив
      }
       if (foundNextNum) {
          if(Integer.parseInt(array[i]) > Integer.parseInt(array[n])) {  //сравниваем и переставляем
          temp = array[i]; array[i] = array[n]; array[n] = temp; foundNextNum = false;
          }
   }  }  }   }   }
спасибо, что дочитали до конца )) UPD1: благодаря подсказке в комментарии, стало понятно, что ставить проверку нужно было не на if (n == array.length) break; а на if (n == array.length-1) break; но код всё равно ведёт себя непредсказуемо: вместо ArrayIndexOutOfBoundsException теперь натыкаемся на Exception in thread "main" java.lang.NumberFormatException: For input string: "Яблоко" и всё так же не ясно почему UPD2: уже практически даже ясно почему ))