Метод CharAt () для String говорит: «Отсутствует символ ...» - PullRequest
0 голосов
/ 06 мая 2018

У меня есть назначение, чтобы создать метод, который проверяет все подстроки строки, которые начинаются и заканчиваются определенным символом. я использовал chatAt () в строке, но по какой-то причине он выдает ошибку (не может найти символ charAt (int)), даже если я запускаю его в строке. а также ошибка для метода .length (невозможно найти символ - переменная длина). Я не понимаю, почему эта ошибка происходит. Может кто-нибудь объяснить, пожалуйста? все, что я нашел в других вопросах, было то, что метод не был запущен на строке, что я и сделал.

вот код:

public static int subStrC (String s, char c)
{
 int count = 0;
 for (int i=0; i<s.length ; i++)
    if (s.charAt(i).equals(c))
        for (int j=i+1; j<s.length; j++)
            if (s.charAt(j).equals(s.charAt(i))){
                count++;
                i=j;
            }
}

EDIT: Я попробовал некоторые ответы, которые я получил здесь, и ошибка остается той же. вот код сейчас:

public static int subStrC (String s, char c)
{
 int count = 0;

 for (int i = 0; i < s.length(); i++)
    if (s.charAt(i) == c)
        for (int j=i+1 ; j < s.length(); j++)
            if (s.charAt(j) == c ){
                count++;
                i=j;
            }

  }

РЕДАКТИРОВАТЬ 2: Я перепробовал все, что мне сказали здесь безрезультатно Ошибка остается. Вот полный класс:

public class String
{

public static int subStrC (String s, char c)
{
  int count =0;
 for (int i = 0; i < s.length(); i++)
 {
    if (s.charAt(i) == c)
    {
        for (int j=i+1 ; j < s.length(); j++)
        {
            if (s.charAt(j) == c ){
            count++;
            i=j;
            }
        }
    }
}
 return count;
}
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2018
public class String

И проблема с вашим кодом в том, что вы назвали свой класс String. String уже является классом в JDK с методу charAt (...).

Ваш класс String не реализует этот метод, поэтому вы получаете ошибку компиляции.

Измените имя класса, сделайте что-нибудь еще, например StringUtils.

Именно поэтому никто не заметил проблему:

  1. в первой публикации кода вы не указали имя класса, просто метод
  2. во втором редактировании вы дали имя класса, но оно отличалось от остальной части кода, поэтому люди пропустили соединение.

Вот почему правильно отформатированный полный код должен публиковаться с каждым вопросом.

0 голосов
/ 06 мая 2018

Во-первых, чтобы получить длину строки, которую вы делаете: s.length() Далее, у вас нет оператора возврата, поэтому вы всегда получите ошибку. Вы должны вернуть count в конце вашего метода, так как я считаю, что это то, что вы используете для отслеживания количества подстрок в строке, начинающейся с символа. Вы также должны проверить, является ли J c, а не J: I: if(s.chatAt(j) == c) Это утверждение if также поднимает мою другую мысль: поскольку символы являются примитивными данными, вы должны использовать ==, а не .equals для объектов. В вашем методе также отсутствуют скобки, но я пошел дальше и создал рабочую версию этого метода, но с одной сломанной частью, которую вам придется исправить. Это легко исправить, и после этого вы получите желаемую функциональность:

 int count = 0;
 for (int i=0; i<s.length() ; i++){
    if (s.charAt(i) == c){
        for (int j=i+1; j<s.length(); j--){
            if (s.charAt(j) == c){
                count++;
                i=j;
            }
        }
    }
}
...