2016-06-23 2 views
0

Я хочу, чтобы часть «else» была только в том случае, если никакая подстрока не соответствует во всей комбинации, или, как, наконец, только если не найдено совпадение.Следующая программа имеет проблему в разделе «else»

код:

public class Stringg { 

    public static void main(String[] args) 

    { 
     char[] array1 ={'a','c','t','i','a','n','c','e'}; 
     String Str2 ="cti"; 

     for (int i = 0; i < array1.length-Str2.length(); i++) 
     { 
      String Str =""; 
      for (int j = i; j < i+ Str2.length(); j++) 
      { 

       Str+=array1[j]; 

      } 

      if(Str.equalsIgnoreCase(Str2)) 
      { 
       System.out.println("This is a substring"); 
       break; 
      } 
      else{ 
       System.out.println("This is not a substring"); 
      } 

     } 

    } 

} 

выход:

This is not a substring 

This is a substring 
+0

Если вы ждете больше результатов, вы должны удалите «break». – Grayson

ответ

1

Вы можете создать boolean isSubstring = false перед основным циклом for, тогда, если когда-либо имеется соответствующая подстрока, установите isSubstring = true. Затем, когда весь цикл заканчивает просто, если заявление, таких как:

if(isSubtring == false) { System.out.println("This is not a substring"); }

1

Перемещение System.out.println("This is not a substring) после для петли и заменить перерыв с возвращением. Таким образом, метод выйдет, если это подстрока. Если это не так, он не выйдет, и таким образом, только если вся комбинация не будет соответствовать, будет напечатана This is not a substring.

Окончательный результат будет выглядеть примерно так:

class Stringg { 
    public static void main(String[] args) 

    { 
     char[] array1 = {'a', 'c', 't', 'i', 'a', 'n', 'c', 'e'}; 
     String Str2 = "cti"; 

     for (int i = 0; i < array1.length; i++) { 
      String Str = ""; 
      for (int j = i; j < i + Str2.length(); j++) 
       Str += array1[j]; 

      if (Str.equalsIgnoreCase(Str2)) { 
       System.out.println("This is a substring"); 
       return; 
      } 

     } 
     System.out.println("This is not a substring"); 
    } 

} 

Это работает так:

  1. проверить, если есть совпадение
  2. если есть печать This is a substring и выйти из метода, иначе повторить 1-й этап
  3. если ни одна из комбинаций не выполнена печать This is not a substring
+0

Спасибо. Он работает .. я также нашел, когда Str2 = "nce" .. i возвращает строку не найденную .. но на самом деле она совпадает. любая идея почему? –

+0

@SureshKumar это потому, что в первом цикле вы сделали: 'i Mibac

+0

моя идея была ... если основная строка - «actiance» (длина 8), а подстрока - «cti» (длина 3) ... Я хочу разделить основную строку как act, cti, tia, ian, anc, nce. .. так как длина подстроки 3 ... im расщепляется как 3 цифры ... но i ndt хочет «ce» или «e», поскольку они представляют собой 2 и 1 цифры, которые в любом случае не соответствуют моей подстроке ... но эта логика должна также совпадают, когда длина подстроки изменяется на 2 или 4 ..etc –

0

Может быть, этот путь

public class Stringg { 

    public static void main(String[] args) { 

     int matchingCount = 0; 

     char[] array1 = {'a', 'c', 't', 'i', 'a', 'n', 'c', 'e'}; 
     String Str2 = "cti"; 

     for (int i = 0; i < array1.length - Str2.length(); i++) { 
      String Str = ""; 
      for (int j = i; j < i + Str2.length(); j++) { 

       Str += array1[j]; 
      } 

      if (Str.equalsIgnoreCase(Str2)) { 
       matchingCount++; 
       System.out.println("This is a substring"); 
       break; 
      } 
     } 

     if (matchingCount < 1) { 
      System.out.println("This is not a substring"); 
     } 
    } 
} 

выхода:

This is not a substring 
+0

Соответствие счету всегда будет 0. Лучше использовать логическое значение, потому что из того, что я знаю, он не будет использовать столько памяти. В любом случае, это небольшая сумма, так что это не имеет большого значения для небольших проектов, но по большому счету это может иметь большую разницу. Несмотря на то, что логический подход использует меньше памяти, я думаю, что мой еще лучше, потому что он не использует аддитатной памяти. – Mibac