Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/74: Рейтинг темы: голосов - 74, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
1

Баланс скобок в заданной строке

16.10.2012, 18:29. Показов 14138. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам

Доброго времени суток.
Подскажите каким циклом пользоваться и где лучше хранить введенные символы "),(" и "],[" чтобы затем выводить true либо false (одинаковое количество их или нет).
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2012, 18:29
Ответы с готовыми решениями:

В данном тексте проверить баланс открывающих и закрывающих скобок
var str: string; i,s1,s2: integer; begin {суммам присваиваем значение 0 это количество...

За один просмотр файла проверить баланс круглых скобок в тесте, используя стек
помогите, пожалуйста, решить Дан текстовый файл с программой на алгоритмическом языке. За один...

Проверка растановки скобок в строке
Добрый день. Суть задачи - написать метод, который проверяет симметрично ли расставлены скобки в...

Поиск скобок в строке с использованием регулярных выражений
Есть строка, в которой нужно знать есть ли там скобки "{" "}", но скобки в регулярных выражениях...

15
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
16.10.2012, 19:14 2
Цитата Сообщение от hoocie Посмотреть сообщение
каким циклом пользоваться
for

Цитата Сообщение от hoocie Посмотреть сообщение
где лучше хранить введенные символы
в стеке
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
16.10.2012, 20:01  [ТС] 3
буду пробовать

Добавлено через 42 минуты
Буду признателен если подскажите разумный алгоритм решения.(определения количества тех и других скобок)
0
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
16.10.2012, 20:45 4
строка задана? или вводится с клавы?
просто баланс и вывод true или false в случае разного количества?
скобки должны быть закрыты ? или просто количество?

сформировал бы задачу нормально.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
16.10.2012, 20:54  [ТС] 5
ввод осуществляется с клавиатуры.
закрыты или нет не указано. понимать можно как угодно, главное чтобы правильно проверяло
([][][) - не правильно, ([][][]) - правильно, а выводить должно только true или false
0
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
16.10.2012, 21:14 6
Цитата Сообщение от hoocie Посмотреть сообщение
ввод осуществляется с клавиатуры.
закрыты или нет не указано. понимать можно как угодно, главное чтобы правильно проверяло
([][][) - не правильно, ([][][]) - правильно, а выводить должно только true или false
][][][ количество одинаково, но это будет не правильно.
задача популярная в "вузах", воспользуйтесь поиском, на форуме наверняка рассматривалась уже.
0
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
16.10.2012, 21:19 7
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while (condition) {
    if (s == "("){
        counter++;
    }
    else if (s == ")") {
        counter--;
        if(counter<0)
             return true;
    }
}
    if (counter == 0)   
        return false;
    else    
        return true;
}
то же самое для других скобок
1
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
16.10.2012, 21:40  [ТС] 8
null

почему?
0
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
16.10.2012, 21:41 9
дай код
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
16.10.2012, 21:49  [ТС] 10
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Scanner;
 
public class zad1{
    
    static int n;
    static int counter;
    static boolean condition;
    static int myArray[];
    
    public static boolean run(){
        try{
        Scanner in = new Scanner(System.in);
        System.out.print("Enter: ");
        n = in.nextInt();
        in.close();
     
        for(int i=0; i < myArray.length; i++){
            while (condition) {
                if (Integer.toString(i) == "("){
                    counter++;
                }
                else if (Integer.toString(i) == ")") {
                    counter--;
                    if(counter < 0)
                         return true;
                }
            }
                if (counter == 0)   
                    return false;
                else    
                    return true;
            }
        }
        catch (Exception e){
            System.err.println(e.getMessage());
        }
        return condition;
    }
    public static void main(String[] args){   
        run();
    }
    }
0
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
16.10.2012, 21:54 11
condition - это как бы условие обхода по твоей строке со скобками)
в твоем коде оно никак не меняется, поэтому null, странно, исключения применяешь, а такие вопросы)
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
16.10.2012, 22:01  [ТС] 12
kazahec, выкинь код пож
0
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
16.10.2012, 22:30 13
а и да, ты скобки хранишь в int?)

Добавлено через 28 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication17;
import java.util.Scanner;
/**
 *
 * @author Dmitry
 */
public class JavaApplication17 {
 
    public static void main(String[] args) {
        
        String str;
        int counter1=0;
        int counter2=0;
        boolean result=false;
        
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter: ");
        str=sc.nextLine();
        sc.close();
        
            for(int i=0; i<str.length();i++){
                
                if(str.charAt(i)=='('){
                     counter1++;
                }
                else if (str.charAt(i)==')'){
                    counter1--;
                }
                if(str.charAt(i)=='['){
                     counter2++;
                }
                else if (str.charAt(i)==']'){
                    counter2--;
                }
            }
            
            if((counter1==0)&&(counter2==0)) result=true;
            else result=false;
        
         System.out.println(result);
    }
}
1
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
16.10.2012, 22:34  [ТС] 14
стыд и срам )
0
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
16.10.2012, 22:37 15
Задача очень стара. Стоит только поискать в гугле, как тут же вывалится тысяча готовых решений
http://www.java2s.com/Code/Jav... hecker.htm
http://articles.org.ru/docum/java/gl6/gl6.php
1
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 29
19.10.2012, 17:57  [ТС] 16
может пригодится кому

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.*;
 
public class NeWo {
    
    private static int Error = 0;
    //Чтение
    public static String ReadLine() {
        try {
            return 
            new BufferedReader(new InputStreamReader (System.in)).readLine();
        } 
        catch (IOException e) {
            return new String();
        }
    }
// Проверяет строку на корректность
    public static boolean isValid(String s) {
        String open = "([{<";
        String close = ")]}>";
        Stack stack = new Stack ();
        
        for (int i = 0; i < s.length(); i++)
        {
            for (int j = 0;j < open.length(); j++){
                if (s.charAt(i) == open.charAt(j)){
                    stack.push(open.charAt(j)); 
                }
            }
            for (int j = 0; j < close.length(); j++){
                if (s.charAt(i) == close.charAt(j))
                { 
                    if (!stack.isEmpty()){
                        if ((stack.peek() != (Object)'(') 
                                && (stack.peek() == (Object)(char)
                                    ((int) close.charAt(j)-2)))
                        {
                            stack.pop();
                        }
                        else 
                            if (stack.peek()== (Object)'(' && close.charAt(j)==')'){
                                stack.pop();
                            } 
                            else { 
                                Error = i+1; 
                                return false;
                            }
                    }
                    else {
                        Error = i+1; 
                        return false;
                    }
                }
            }
        }
        if (stack.isEmpty()) 
            return true;
        else {
            Error = s.length(); 
            return false;
        }
    }
// Если последний вызов isValid обнаружил ошибку, возвращает
// позицию, в которой обнаружена ошибка
    public static int getErrorPos(){ 
        return Error;
    }
// Если последний вызов isValid обнаружил ошибку, возвращает
// сообщение об ошибке
    public static String getErrorMessage(){ 
        if (Error > 0) 
            return "Error in "+getErrorPos()+" position";
        else 
            return "Accepted";
    }
    
    public static void run(){
        String str = ReadLine();
        System.out.println(isValid("[ {([])} ]a - (b - (c - []a) / (b<> + c) - 2)"));
        System.out.println(getErrorMessage());
        isValid(str);
        System.out.println(getErrorMessage());
    }
    
    public static void main(String[] args){
        run();
    }
}
0
19.10.2012, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2012, 17:57
Помогаю со студенческими работами здесь

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

Проверить, имеется ли в заданной строке символов баланс открывающихся и закрывающихся скобок
Проверить, имеется ли в заданной строке символов баланс открывающихся и закрывающихся скобок

Проверить имеется ли в заданной строке символов баланс открывающихся и закрывающихся круглых скобок
проверить имеется ли в заданной строке символов баланс открывающихся и закрывающихся круглых скобок

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru