Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从字符串中提取括号_Java_String_Parentheses_Charat - Fatal编程技术网

在Java中从字符串中提取括号

在Java中从字符串中提取括号,java,string,parentheses,charat,Java,String,Parentheses,Charat,我是Java新手,正在尝试完成一个程序,该程序将读取用户的语句,并扫描左括号的数量是否与右括号的数量匹配。启动该程序的人创建了一个堆栈,但从未使用过它,所以我不使用它,因为我不太擅长使用堆栈。然而,我能够创建一个循环来遍历字符串中的每个字符,找到括号,比较它们,然后打印出来,如果它们是偶数或非偶数。但是,我遇到了通过字符串查找所有括号的while循环的问题。因为某种原因它不起作用,我不明白为什么。任何关于如何使这项工作的解释将不胜感激 import java.util.* public clas

我是Java新手,正在尝试完成一个程序,该程序将读取用户的语句,并扫描左括号的数量是否与右括号的数量匹配。启动该程序的人创建了一个堆栈,但从未使用过它,所以我不使用它,因为我不太擅长使用堆栈。然而,我能够创建一个循环来遍历字符串中的每个字符,找到括号,比较它们,然后打印出来,如果它们是偶数或非偶数。但是,我遇到了通过字符串查找所有括号的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."); 
    }
}

}

例如,您需要初始化x

int x = 0;
不能增加未初始化的变量。 另外,要定义parenline,而不是仅使用字符串本机方法之一在字符串中的位置循环和添加字符,请执行以下操作:

char parenline[] = line.toCharArray();

如果我解释得不好,很抱歉。

您有以下错误:

不初始化 使用双引号代替单引号 检查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++;
}

我对你的代码做了一些修改,效果很好。 但是,使用堆栈的方法更好,因为它不仅允许您查看括号的数量是否相等,还允许您查看表达式是否正确。例如,如果您有这样的表达式: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.");

}

}

定义“不工作”。在我看来,这段代码似乎无法编译,原因在错误消息中已经解释得很清楚了,我想你会得到,但现在这是任何人的猜测。可能是@Kon的重复我不这么认为。kaisernahid,你是对的。我觉得自己是个白痴,因为错过了初始化,我很确定我学到了在循环的条件下,单引号是必需的。对我来说,这是一个愚蠢的举动。谢谢你澄清这一点。这很有帮助,我的代码现在可以工作了。错误消息中有足够的信息告诉你所有这些。除了这个:i>parenline.length之外,所有都是编译错误。顺便说一句,这将只匹配括号的总数,而不是@Vasilina所说的括号的位置。