-2

我是 Java 新手,并试图完成一个程序,该程序将读取用户的语句并扫描以查看 LEFT 括号的数量是否与 RIGHT 匹配。启动程序的人创建了一个堆栈,但从未使用过它,所以我不理会它,因为我不太擅长堆栈。但是,我能够创建一个循环来遍历字符串中的每个字符以找到括号,比较它们,然后打印出它们是否是偶数。但是,我在遍历字符串以查找所有括号的 while 循环时遇到了麻烦。由于某种原因它不起作用,我不明白为什么。任何关于如何进行这项工作的解释将不胜感激。

import java.util.*
public class ParenMatch
       {
public static void main (String[] args)
    {
Stack s = new Stack();
String line; // the string of characters to be checked
Scanner scan = new Scanner(System.in);
System.out.println ("\nParenthesis Matching");
System.out.print ("Enter a parenthesized expression: ");
line = scan.nextLine();

char parenline[] = new char[line.length()];

int x;
while(x < parenline.length) {
parenline[x] = line.charAt(x); 
        x++; 
    }
 int l,r,i,morel,morer = 0; 
while (i > parenline.length) {
        if (parenline[i] == "(" )
            l++;
        if (line.charAt(i) == ")") 
            r++; 
        i++;
    }

    if (l > r) {
        morel = l-r;  
        System.out.println("There are " +morel+ " more left parentheses than    right"); 
    }

    if (r > l) {
        morer = r-l; 
        System.out.println("There are " +morer+ " more right parentheses then left"); 
    }
    if (r == l) {
        System.out.println("The amount of left and right parentheses are even."); 
    }
}

}

4

3 回答 3

0

例如,您需要初始化 x 。

int x = 0;

您不能增加未初始化的变量。还要定义 parenline 而不是循环并仅使用字符串本机方法之一在字符串中的位置添加字符:

char parenline[] = line.toCharArray();

对不起,如果我解释得不好。

于 2013-08-27T02:11:39.943 回答
0

你有以下错误:

  1. 未初始化
  2. 使用双引号代替单引号
  3. 检查 i 是否大于 parenline.length

这是正确的代码块:

int x=0;
...

int l,r,i,morel,morer;
l=r=i=morel=morer= 0; 
while (i < parenline.length) {
    if (parenline[i] == '(' )
        l++;
    if (line.charAt(i) == ')') 
        r++; 
    i++;
}
于 2013-08-27T02:14:23.143 回答
0

我对您的代码进行了一些更改,它工作正常。但是,使用 Stack 的方法更好,因为不仅可以查看括号的数量是否相等,还可以查看表达式是否正确。例如,如果你有这样的东西: (x+y))+(x-(y+x) 那么你的程序不能判断这是一个不正确的表达式,因为左括号和右括号的数量是相等的。

import java.util.*;
public class Stackpr {
    public static void main (String[] args)
    {
    String line; // the string of characters to be checked
    Scanner scan = new Scanner(System.in);
    System.out.println ("\nParenthesis Matching");
    System.out.print ("Enter a parenthesized expression: ");
    line = scan.nextLine();
    int l = 0;
    int r = 0;
    for (int i = 0; i < line.length(); i++){
    if (line.charAt(i) == '(')
        l++;
    else if (line.charAt(i) == ')')
        r++;
        }
    if (l > r) 
    System.out.println("There are " + (l-r) + " more left parentheses than right");
    else if (l < r)
    System.out.println("There are " + (r - l)+ " more right parentheses then left");
    else 
    System.out.println("The amount of left and right parentheses are even.");

}

}

于 2013-08-27T02:38:41.500 回答