Професионална програма
Loading...
AnnaIvanova11 avatar AnnaIvanova11 20 Точки

Balanced Brackets - Data Types - More Exercise -> Java

Здравейте, 

Не мога да разбера задачата, изкарвам 57 от 100, с моето решение, може ли малко помощ?  По-скоро не схващам какво се иска и не съм съобразила, на иде-то си работи.Обходих граничните случаи, за които се сетих. Рефактурирах си един код на колега от C#, минава със 100 от 100 неговия, а пък двата кода се държат еднакво на outputa-a в иде-то. Не мога да схвана....

Благодаря предварително!

Условие:

1.Balanced Brackets

You will receive n lines. On those lines, you will receive one of the following:

  • Opening bracket – “(“,
  • Closing bracket – “)” or
  • Random string

Your task is to find out if the brackets are balanced. That means after every closing bracket should follow an opening one. Nested parentheses are not valid, and if two consecutive opening brackets exist, the expression should be marked as unbalanced.

Input

  • On the first line, you will receive n – the number of lines, which will follow
  • On the next n lines, you will receive “(”, “)” or another string

Output

You have to print “BALANCED”, if the parentheses are balanced and “UNBALANCED” otherwise.

Constraints

  • n will be in the interval [1…20]
  • The length of the stings will be between [1…100] characters

Examples

Input

Output

 

Input

Output

8

(

5 + 10

)

* 2 +

(

5

)

-12

BALANCED

 

6

12 *

)

10 + 2 -

(

5 + 10

)

 

UNBALANCED

Моя код :

import java.util.Scanner;

public class balancedBrackets {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int inputLines = Integer.parseInt(scan.nextLine());
        int count = 0;
        boolean isBalance = false;

        for (int i = 1; i <= inputLines; i++) {

            String input = scan.nextLine();
            if (i % 2 != 0) {
                count++;
                if (count % 2 != 0) {
                    if ("(".equals(input)) {
                        isBalance = true;
                    } else {
                        isBalance = false;
                        break;
                    }
                } else {
                    if (")".equals(input)) {
                        isBalance = true;
                    } else {
                        isBalance = false;
                        break;
                    }

                }
            }
            if (i % 2 == 0) {
                if ("()".equals(input) || "(".equals(input)) {
                    isBalance = false;
                    break;
                }
            }
            if (inputLines == i && "(".equals(input)) {
                isBalance = false;
                break;
            }

        }
        if (!isBalance) {
            System.out.println("UNBALANCED");
        } else {
            System.out.println("BALANCED");
        }
    }
}

 

Тагове:
0
Fundamentals Module 25/01/2020 23:48:35
AnnaIvanova11:
Кода не е полезен, грешката е от неправилно прочетено условие.
KeepCoding avatar KeepCoding 553 Точки
Best Answer

Ако си пуснеш програмата и започнеш да ползваш втория вход, още на изписването на "12 *" излиза текстът "UNBALANCED" без даже да е вкарана и една скоба. Това не е на добре и макар да съвпада с крайния отговор, то със сигурност създава проблеми при други тестове. Не знам защо проверяваш дали е четен редът или не, и други неща не са ми особено ясни.

Условието е сбъркано леко. Пише че след всяка затваряща скоба трябва да има отваряща, а трябва да е обратното. Но като цяло идеята е че на един ред ще има или разни си числа и математически знаци, които не те интересуват, или ще има отваряща/затваряща скоба. И нещата които ти казват да следиш са дали за всяка отваряща скоба има затваряща после, както и дали няма срещнати две отварящи скоби преди да е вкарана затваряща. 

Съветвам те да започнеш отначало задачата и да потренираш работа с debugger. Как бачка debugger - позволява ти да обходиш кода си и да видиш и изпълнението на всеки ред код, както и да следиш стойностите на всяка променлива. Лесно се работи с него. Цъкаш между кода и номерчето на реда на кода, появява се една червена точка. После цъкаш десен бутон някъде върху кода и цъкаш "Debug <име на задачата>.main()", или пък горе вдясно зеленото насекомо. И после с F8 минаваш ред по ред през кода. Доста полезно средство е и освен че помага за намиране на грешки, също и улеснява ученето, защото виждаш какво става след всеки ред код. Има още много функционалности, но засега това ти стига.

Пускам и едно решение на Джава, което може да разгледаш ако задачата не ти потръгне. https://pastebin.com/1VDheJJi

0
AnnaIvanova11 avatar AnnaIvanova11 20 Точки

Привет,

Сега разбрах, ами вярваш или не всъщност дебъгвах. Проблема ми е в другия компютър този главния на втория етаж хаха laugh. В даден момент реших, че може би скобите трябва да са само на нечетни редове и ще получавам серия от изрази, без да съм асимилира както трябва условието.  Благодаря много особено за кода, като го видях ми просветна съвсем, че съм правила тъпотии хаха.

0
26/01/2020 12:11:43