0

str を空の文字列に初期化し、カウンターを 0 にリセットする BalancedString の既定のコンストラクターを使用するには、次のコードが必要です。クラスの 1 つの引数コンストラクターは、文字列 s を str に渡し、カウンターをゼロにリセットします。BalancedString クラスは、ブール値のbalanced() であるブール値メソッドも提供します。これは、文字列にバランスのとれた量の括弧が含まれている場合に true を返します。

import java.util.*;
public class BalancedString {
    private static String str;


    public BalancedString()
    {
        str = "";

    }

    public BalancedString(String s)
    {
        s = "";
        str = s;

}



public boolean balanced(){

    return true;

}
public static void main(String[] args) {
    int n = 0;
    CounterFancy.setCounter(n);
    Scanner input = new Scanner(System.in);
    System.out.println("Enter a string that has any number of Left and right Parenthesis");
    String s = input.next();


        if (s.indexOf('(') != -1)

            CounterFancy.incCounter();

        if (s.indexOf(')') != -1)

            CounterFancy.decCounter();


    int counterValue = CounterFancy.getCounter();
    if (counterValue == 0)
        System.out.println("The string is Balanced");
    else 
        System.out.println("The string is NOT Balanced");
    input.close();
}

public String getStr()
{
    return str;
}
public String setStr(String s)
{
    str = s;
    return str;
}

}

そして、以下は私がCounterFancyクラスを取得した他のプロジェクトですが、問題は上記です^^なぜこれはバランスが取れていることだけを出力するのですか

//Joe D'Angelo
//CSC 131-03
//Chapter 10 Programming Assignment 5a.
//Takes the user's input of whether they want the counter to be negative or positive and outputs
//10 values of the user's selected input, then restarts the counter at 0
import java.util.*;
public class CounterFancy { //I messed up the first time and had to change FancyCounter to CounterFancy that is why this is changed

    private static int counter;

    public CounterFancy()
    {
        counter = 0;        
    }

    public  CounterFancy(int n){
        counter = n;
    }

    public static int incCounter() //inc stands for increment
    {
            counter++;
        return counter;
    }
    public static int decCounter() //dec stands for decrement
    {
        counter--;
        return counter;
    }

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("Press 1 for Possitive or Press 2 for Negative");
        int reply = input.nextInt();

        if (reply == 1)
        {
        for (int i = 1; i <=10; i ++)
        System.out.println("counter: " + CounterFancy.incCounter());
        CounterFancy.setCounter(5);
        System.out.println("Counter: " + CounterFancy.getCounter());

        }

        if (reply == 2)
        {
            for (int i = 1; i <=10; i ++)
                System.out.println("counter: " + CounterFancy.decCounter());
            CounterFancy.setCounter(5);
            System.out.println("Counter: " + CounterFancy.getCounter());

        }
        input.close();
        }



    public static int getCounter()
    {
        return counter;
    }

    public static void setCounter(int n)
    {
        counter = 0;
    }

}
4

2 に答える 2

1

このコードには論理的な問題があります。

String s = input.next();

if (s.indexOf('(') != -1)
    CounterFancy.incCounter();

if (s.indexOf(')') != -1)
    CounterFancy.decCounter();

int counterValue = CounterFancy.getCounter();
if (counterValue == 0)
    System.out.println("The string is Balanced");
else 
    System.out.println("The string is NOT Balanced");

(文字列を aで 1 回、 a で 1 回だけ検索しています)(文字列に aと a の両方)が任意の順序で含まれている場合、カウンターは常に 1 をカウントし、次に 0 をカウントし、括弧のバランスが取れていると見なします。

かっこのバランスが取れているかどうかを確認するには、カウントをループに入れる必要があります。各文字をループして、各ステップでカウントを確認する必要があります。各ステップでカウントが負ではなく、0 で終了する場合、括弧はバランスが取れています。

于 2012-11-21T01:03:32.727 に答える
1

BalancedStringクラス定義でいくつかの間違いを犯しています。まず、strフィールドは であってはなりませんstatic。にすることでstatic、すべてのインスタンスが同じstrフィールドを共有します。

第二に、おそらくもっと重要なことですが、BalancedString適切に構築していません。毎回引数を空の文字列に戻しています!

public BalancedString(String s) {
        s = ""; // THIS LINE SHOULD NOT BE HERE!
        str = s;
}

最後に、balanced()メソッドは文字列に関係なく単純に返さtrueれます。ここでいくつかのロジックを実装する必要があります。

メインプログラムに関して:すべての文字をループし、文字ごとにインクリメントし、文字ごとにデクリメントする必要あり '('ます。これの代わりに: ')'

if (s.indexOf('(') != -1)

        CounterFancy.incCounter();

if (s.indexOf(')') != -1)

    CounterFancy.decCounter();

次のようなループが必要です。

for (int i = 0; i < s.length(); ++i) {
    char c = s.charAt(i);
    if (c == '(')
        CounterFancy.incCounter();
    else if (c == ')')
        CounterFancy.decCounter();
}
于 2012-11-21T01:05:40.027 に答える