Новичок в программировании, получая ошибку во время выполнения, не знаю почему - PullRequest
0 голосов
/ 09 мая 2019

В основном кратко изложено в заголовке.https://ideone.com/E2BMS8 <- это ссылка на код.Я понимаю, что если вы не хотите нажимать на него, я тоже вставлю его сюда.будет просто дезорганизован.Код должен переворачивать буквы, но держать слова в том же положении.Я хотел бы выяснить эту часть самостоятельно, хотя.Просто нужна помощь с ошибкой во время выполнения. </p>

import java.util.*;

class Ideone {

  public static void main (String[] args) throws java.lang.Exception {

    Scanner input = new Scanner(System.in);
    String sent, accum = "";
    char check, get;
    int len, count = 0;

    System.out.print("Please enter the sentance you want reversed: ");
    sent = input.nextLine();

    len = sent.length();

    for (int i = 0; i < len; i++) {

      check = sent.charAt(len - i);
      count += 1;

      if (check == ' ') {

        for (int p = 0; p < count; p++) {

          while (p < count) {

            get = sent.charAt(len - p);
            accum += (get + ' ');

          }
        }
      }


    }

    System.out.println("Reversed: " + accum);
  }
}

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Ошибка String index out of range является причиной, потому что длина на один больше, чем диапазон индекса.Удалите один индекс, как я сделал ниже:

import java.util.*;

public class Ideone {
    public static void main (String[] args) throws java.lang.Exception {
        Scanner input = new Scanner(System.in);
        String sent, accum = "";
        char check, get;
        int len, count = 0;
        System.out.print("Please enter the sentance you want reversed: ");
        sent = input.nextLine();
        len = sent.length();
        for (int i = 0; i < len; i++) {
            check = sent.charAt(len - i - 1);
            count += 1;
            if (check == ' ') {
                for (int p = 0; p < count; p++) {
                    get = sent.charAt(len - p - 1);
                    accum += (get + ' ');
                }
            }
        }
        System.out.println("Reversed: " + accum);
    }
}
0 голосов
/ 09 мая 2019

Это классическая ошибка «off by one» - вы столкнетесь с lot , когда найдете свои навыки программирования.Проблема в этом случае - индексация на основе 0.То есть первый символ строки имеет индекс 0, а последний - индекс « длина строки - 1 ».Если мы используем sent = "Test"; в качестве примера, то:

sent.charAt(0) == 'T'
sent.charAt(1) == 'e'
sent.charAt(2) == 's'
sent.charAt(3) == 't'
sent.charAt(4) == ???  // "That's an error, Jim!"

Обратите внимание, что индекс 4 - который, возможно, вводит в заблуждение * длина строки - выходит за пределы.Итак, что происходит во время первой итерации цикла, когда i == 0:

check = sent.charAt(len - i);   // ERROR!  Because ...
==>   = sent.charAt((4) - (0));
==>   = sent.charAt( 4 );       // Doh!

Я оставляю это вам, чтобы выяснить, как вы можете это исправить.

...