2016-10-18 3 views
1

Привет, я студент, и мой вопрос более подробно.Строка и 2 буквы

Для строки и двух букв (c1 и c2), возвращаем счетчик количества раз, когда «axb» встречается в строке, где x - любой символ. Например, учитывая строку «Зенитное звание» и буквы «a» и «t», ваш метод должен вернуться 2. Трехбуквенные шаблоны могут перекрываться. Например, «aaaa» имеет два вхождения «axa».

Теперь то, что я записал до сих пор

public int countAxA(String str, char c1, char c2) { 

int count = 0; 
    for (int i=0; i < str.length(); i++) 
    { 
     if (str.charAt(i) == c2) 
     { 
      count++; 
     } 
    } 
    return count; 
} 

Итак, в соответствии с моей домашней работой некоторые из входов работают, но другие не делают. Есть что-то, чего я не вижу?

+0

использование равна() с Последовательностью –

+0

Что такое '' c1' и c2'? вы хотите найти вхождения 'c1xc2'? –

+0

@KorayTugay, так бы я сделал c1.equals (c2)? – SktSkat

ответ

0
public int countAxA(String str, char c1, char c2) { 

int count = 0; 
    for (int i=0; i < str.length(); i++) 
    { 
     if (str.charAt(i) == c1) 
     { 
      if(i+2 < str.length() && str.charAt(i+2) == c2) 
       count++; 
     } 
    } 
    return count; 
} 

Попробовать это !!!

+0

Ahh, поэтому мне не хватало оператора if логическим и оператором. Спасибо, это намного больше смысла. – SktSkat

+0

@SktSkat проверить мой ответ - это более общий. – xenteros

+0

Почему не 'for (int i = 0; i

1

Просто итерацию один раз и следить, и если случится найти первый символ затем сделать предпросмотр:

public int countAxA(String s, char one, char two) { 
    char[] cs = s.toCharArray(); 
    int count = 0; 
    for (int i = 0; i < cs.length - 2; i++) { //don't need to go beyond 3rd last char 
     if (cs[i] == one && cs[i + 2] == two) { 
      count++; 
     } 
    } 
    return count; 
} 
+0

Вам нужно вернуть счет, а не true или false –

+0

Упс, легко фиксируется. – Rogue

+0

Вам не нужно получать массив символов. Это обязательно делает копию массива символов строки (поскольку массив символов изменен). Просто используйте 'charAt'. –

0
public int countAxA(String str, char c1, char c2) { 


int count = 0; 
for (int i=0; i < str.length()-2; i++) 
    { 
    if (str.charAt(i) == c1 && str.charAt(i+2) == c2) 
     { 
      count++; 
     } 
    } 
    return count; 

} 

попробовать это .. вы проверяете c2 только так, tanticarft в качестве входных данных приведет к выходу: -3

но вы должны проверить, c1 и c2 как

0

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

if (str.charAt(i) == c2) { count++; }

просто подсчитывать, сколько раз встречается символ c2.

попробовать использовать что-то вроде этого,

if(str.charAt(x)==c1 && str.charAt(x+2) ==c2) 
    count ++ 

с этим утверждением вы сейчас проверка если AXB существует и добавление 1 подсчитывать каждый раз, когда вы столкнетесь с вхождением Axb.

+0

добавить инструкцию проверки для 'x + 2', если она выходит за рамки –

+0

@User_Targaryen Да, вы правы, но являетесь сам студент, я знаю, что нехорошо ловить ложные ответы. Я взял слишком много преимуществ google и за год, когда я закодировал, даже не научившись кодировать. Но да, вы должны быть уверены, что останетесь в пределах. –

0

Вы были на правильном пути.

public int countAxA(String str, char c1, char c2) 
    { 
     int count = 0; 
     for (int i=0; i < str.length(); i++) 
     { 
     if (str.charAt(i) == c1 && i +2 < str.length && str.charAt(i+2) == c2) 
     { 
      count++; 
     } 
     } 
    return count; 
} 
  1. Цикл по каждому символу на ул.
  2. Проверьте текущий полукокса равно c1
  3. Если да, то проверить, если текущий индекс + 2 не выходит за пределы
  4. Затем проверьте c2 на текущий индекс + 2
  5. Наконец, если все условия выполнены, то счетчик прироста;
0

Попробовать это ..

int count=0, incrementCounter=2; 
     for(int i=0;i<str.length();i++){ 
      if(str.charAt(i)==c1){ 
       if(str.charAt(i+incrementCounter)==c2 && incrementCounter<=str.length()){ 
        i = i+incrementCounter; 
        count++; 
       } 
      } 
     } 
     System.out.println(count); 
Смежные вопросы