2016-04-19 2 views
2

У меня есть некоторые проблемы с моим кодом.Как определить пробелы оператора

Я хочу определить пробелы оператора, такие как " + ", " +", "+ " или "+".

Я хочу, чтобы мой выход

  • Пробелы оператора «А»

Как я могу изменить мой код?

Мой код здесь.

Scanner input = new Scanner (new File(PATH to file)); 
int plus1; 
int plus2; 
int plus3; 
int plus4; 
String sPlus = ""; 
while (in.hasNext()) { 
    String line = in.nextLine(); 
    in.hasNextLine(); 
    LOC++; 
    if (line.length() > 0) { 

     plus1 = -1; 
     plus2 = -1; 
     plus3 = -1; 
     plus4 = -1; 
     while (true) { 
      plus1 = line.indexOf(" + ", plus1 + 1); 
      plus2 = line.indexOf(" +", plus2 + 1); 
      plus3 = line.indexOf("+ ", plus3 + 1); 
      plus4 = line.indexOf("+", plus4 + 1); 

      if (plus1 > 0) { 
       sPlus = "A"; 
      } 
      if (plus2 > 0) { 
       sPlus = "B"; 
      } 
      if (plus3 > 0) { 
       sPlus = "C"; 
      } 
      if(plus4 > 0){ 
       sPlus = "D"; 
      } 

      if ((plus1 < 0) || (plus2 < 0) || (plus3 < 0) || (plus4 < 0)) break; 
     } 
    } 
} 
+0

Хорошо, так каков ваш вклад и каков ваш ожидаемый результат? В настоящее время, независимо от любого из чисел 'plusX', до тех пор, как' plus4> 0', вы получите '' D "' –

+0

. Мой ввод - текстовый файл, такой как код Java, и мой ожидаемый результат - печать A, B, C или D если А «+» Б «+» с «+» D является «+» – Anonymous

+0

Какими бы проблемой вы пытаетесь решить здесь, вы почти наверняка об этом не в той стороне. Вы должны сканировать ввод символа за раз, игнорируя пробелы, а затем реагируя на любой персонаж, который вы нашли. Вместо этого вы неоднократно просматриваете один и тот же ввод для разных вещей, который плохо работает и просто приводит к бесконечным особым случаям, которые вы обнаруживаете. Это не то, как оцениваются профессии, или как анализируется программный код. – EJP

ответ

0

Есть две проблемы с вашей логикой:

  1. Вы используете trim() в line.indexOf(" +".trim(), plus2+1), который возвращает индекс "+" НЕ " +"
  2. Любое одно вхождение " + " будет учитываться в 4 раза, поскольку line.indexOf(" +") также будет учитывать случаи, когда " + "

Для 2. Было бы гораздо проще в использовании line.indexOf('+'), а затем проверить до и после того, как индекс, чтобы узнать, сколько пробелы есть:

int plus = line.indexOf('+'); 
if(plus == -1) break; 
if(line.charAt(plus-1) == ' ') { 
    if(line.charAt(plus+1) == ' ') //A; 
    else //B; 
} 

else if(line.charAt(plus+1) == ' ') { 
    //C 
} 

else { 
    //D 
} 
+0

1. мой код обновлен. 2. Могу ли я использовать .trim() из «+»? 3. Могу ли я сломать свою петлю? – Anonymous

+0

@Anonymous 'trim()' удаляет все ведущие и завершающие пробелы, так что нет. И разрыв вашей петли зависит от того, что вы пытаетесь сделать. И жаль, что я неправильно прочитал ваш код, ваша логика прерывания прекрасна.Я думал, что ты нарушаешь основную петлю. – Maljam

-1

Надлежащая еще-если может быть помощь.

if (line.indexOf(" + ") != -1) sPlus = "A"; 
else if (line.indexOf(" +") != -1) sPlus = "B"; 
else if (line.indexOf("+ ") != -1) sPlus = "C"; 
else if (line.indexOf("+") != -1) sPlus = "D"; 
else break; 
+0

Это не так, потому что он не обрабатывает случаи, когда существует более одного вхождения '+' – Maljam

+0

@Maljam Также не возникает код в вопросе. –

+0

@Maljam Я согласен с cricket_007. Нет необходимости обрабатывать дело. –

Смежные вопросы