Я должен получить «неверный» в качестве вывода, но я получаю «действительный» в качестве вывода, не знаю, почему вывод неправильный - PullRequest
0 голосов
/ 26 февраля 2020

Я написал программу для проверки правильности заданного математического выражения, но в трех тестовых примерах, которые я взял из Интернета, два из них получили правильный вывод, а один из тестовых примеров получил неправильный вывод, но я не знаете почему ..?

Тестовые случаи, которые я получил правильный вывод: "(a + b) (a * b)" и "((a + b)". Тестовый случай, который я получаю неправильно вывод "(ab) (ab +)"

Код, который я пробовал:

 public static void main(String[] args) {
        // TODO code application logic here
      Scanner sc=new Scanner(System.in);
      String str=sc.next();
      int l=str.length();
      int a1=0,t=0,k=0;
      for(int i=0;i<l;i++){
          if(str.charAt(i)=='('){
              a1++;
          }else if(str.charAt(i)==')'){
              a1--;
          }
          if(str.charAt(i)=='+'||str.charAt(i)=='-'||str.charAt(i)=='*'||str.charAt(i)=='/'){
              k++;
              if(str.charAt(--i)>='a'&&str.charAt(--i)<='z'&&str.charAt(++i)>='a'&&str.charAt(++i)<='z'){
                  t++;
              }
          }
      }
      if(a1==0&&t==k){
          System.out.println("valid");
      }else{
          System.out.println("invalid");
      }
    }

Выход, ожидаемый для тестового примера 3, недействителен, но дает действительный вывод.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Вы не должны писать .charAt(--i) или .charAt(++i). Измените его на i-1 и i+1. ++i и --i изменяют значение i, когда оно проверяется.

0 голосов
/ 26 февраля 2020

Проверьте полный код отсюда

public static void main(String[] args) {
            // TODO code application logic here
          Scanner sc=new Scanner(System.in);
          String str=sc.next();
          int l=str.length();
          int a1=0,t=0,k=0;
          for(int i=0;i<l;i++){
              if(str.charAt(i)=='('){
                  a1++;
              }else if(str.charAt(i)==')'){
                  a1--;
              }
              if(str.charAt(i)=='+'||str.charAt(i)=='-'||str.charAt(i)=='*'||str.charAt(i)=='/'){
                  k++;
                  if(str.charAt(i-1)>='a'&&str.charAt(i-1)<='z'&&str.charAt(i+1)>='a'&&str.charAt(i+1)<='z'){
                      t++;
                  }
              }
          }
          if(a1==0&&t==k){
              System.out.println("valid");
          }else{
              System.out.println("invalid");
          }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...