算術式 (Ex. ((5-6)/(3+2)*34) ) の括弧のバランスが取れているかどうかをテストしていますが、右括弧と左括弧をチェックするループが等しく返されません。プロンプトが表示されたら、コンソールに「()」と入力するだけでテストしています。
for (int i = 0; i < formula.size(); i++)
{
char c = formula.pop();
if (c == ')') {
right++;
break;
} else if (c == '(') {
left++;
break;
} else {
break;
}
}// End for loop
//System.out.println("There are " + left + " left parens, and " + right + " right parens.");
if (right == left)
System.out.println("The parentheses are balanced.");
else
System.out.println("The parentheses are NOT balanced.");
私の右と左の変数は 0 に初期化されており、得られる出力は右括弧が 1 つ、左括弧が 0 であることです。
何かご意見は?私が書いたとき、それは正しく聞こえました/正しく見えました。
更新: これは、if else の代わりに switch ケースを使用するように更新された私のコードです。それでも同じ出力が得られます..
for (int i = 0; i < formula.size(); i++)
{
char c = formula.pop();
switch(c)
{
case ')':
right++;
break; //Which breaks the switch, not the for
case '(':
left++;
break; //We don't need to do anything if it's neither.
}// End switch
}// End for loop
更新#2:最近の変更を含むすべてのメインは次のとおりです。
public static void main(String[ ] args) {
//variables
String formulaString;
Stack<Character> formula = new Stack<Character>();
int right = 0;
int left = 0;
Scanner in = new Scanner(System.in);
System.out.println("Welcome, enter a mathmatical formula and I will "
+ "determine if the parentheses are balanced.\n");
formulaString = in.next();
for (int j = 0; j < formulaString.length(); j++) {
formula.push(formulaString.charAt(j));
}// End for loop
System.out.println("Preview of the formula just entered: ");
System.out.println(formula.display());
System.out.println("The size of the stack is: " + formula.size());
System.out.println("/******************************************");
for (int i = 0; i <= formula.size(); i++)
{
char c = formula.pop();
System.out.println(c);
switch(c)
{
case ')':
right++;
break; //Which breaks the switch, not the for
case '(':
left++;
break; //We don't need to do anything if it's neither.
}// End switch
}// End for loop
System.out.println("There are " + left + " left parens, and " + right + " right parens.");
if (right == left)
System.out.println("The parentheses are balanced.");
else
System.out.println("The parentheses are NOT balanced.");
}// End main.
私が今テストしている私の入力は(())
. 私が得ている私の出力:
Preview of the formula just entered:
[(, (, ), )]
The size of the stack is: 4
/******************************************
)
)
(
There are 1 left parens, and 2 right parens.
The parentheses are NOT balanced.