2016-10-01 10 views
3

Мне нужно написать программу Java, которая читает строку и определяет, есть ли эти две буквы: строчная буква «e» или «d».Прочитайте 2 буквы в строке с помощью JAVA

Вот что я написал до сих пор! любые идеи, почему это не работает?

class ex2 { 
    public static void main(String[] args) { 
     //boolean arg1; 
     char e = 'e'; 
     char d = 'd'; 
     String x = "This is my test"; 
     char[] xh = new char[x.length()]; 
     for(int i=0; i<= x.length();i++) { 
      if (xh[i] == e || xh[i] == d) { 
       // arg1 = true; 
       System.out.println("Correct"); // Display he string 
      } else { 
       //arg1 = false; 
       System.out.println("Wrong"); 
      } 
     } 

    } 
} 
+1

1. вы должны получать ArrayOutOfBoundsException как ваш цикл не должен выполнить для проверки равенства 2. Ваш массив xh пуст – Gaur93

+0

Я ... после печати всех «неправильных» я тоже получаю это исключение .. любые идеи? – noel293

+2

use char xh [] = x.toCharArray(); – Gaur93

ответ

0

это простое решение, если вы хотите использовать его

ПРИМЕЧАНИЯ от комментариев, вы должны иметь учетную запись, если нет e и d, это будет перебирать в два раза по содержанию строки но не второй код, как второй пример просто сокращенная форма для каждого

String str = "ewithd"; 
     if (str.contains("e") || str.contains("d")) { 
      System.out.println("sucess"); 
     } else 
      System.out.println("fail"); 

, если вы хотите, чтобы пойти с массивом, то вы можете использовать foreach() слишком

char[] ch = str.toCharArray(); 
     for (char c : ch) { 
      if (c == 'e' || c == 'd') { 
       System.out.println("success"); 
      else 
       System.out.println("fail"); 
      } 
     } 
+0

, если нет' e' и 'd', это будет повторяться дважды по содержимому' String' –

+0

@nicolasFilotto. Спасибо за то, что я добавлю побочные эффекты .. :) –

1

Во-первых у вас есть ArrayOutOfBound исключение, потому что вам нужно остановить только перед длиной, т.е. i<x.length().

Теперь ваша проблема заключается в том, что вы тестируете массив из char, который заполнен нулевыми символами. Вам необходимо протестировать против струны:

if (x.charAt(i) == e || x.charAt(i) == d) { 
1

Вы никогда ничего не кладете в свой массив. char[] xh = new char[x.length()]; просто объявляет массив длиной, равным x, он не устанавливает элементы xh элементам x. Вместо этого используйте:

char[] xh = x.toCharArray(); 

Вы также должны изменить свой цикл, чтобы:

for(int i=0; i < x.length(); i++) { 

, чтобы избежать выхода за исключением ограничивающей вы сейчас видите.

+0

Вызов 'toCharArray()' будет работать, но это не лучший подход здесь, поскольку он создаст новый массив символов, который бесполезен здесь, поскольку нам нужно только прочитать содержимое 'String' –

1

Ваша главная проблема заключается в том, что вы не правильно перебирать в char вашего String, вот лучший способ сделать это:

for (int i = 0, length = x.length(); i < length; i++) { 
    char c = x.charAt(i); 
    ... 
} 

Предполагая, что вы используете Java 8, вы может полагаться на Stream API сделать то же самое, что и в следующем:

boolean result = x.chars().anyMatch(c -> c == 'e' || c == 'd');