0

私はクラスのプログラムを書いています。プログラムを実行すると、alphabet の値は固定されず、サブクラスで toString() を使用すると、alphabet は常に null になります。2番目のコンストラクターでは、 this.alphabet は私が等しくしたいものと等しいことを知っていますが、その後はその値を失います。奇妙な部分は、machineName がその値を保持していることです。私はまだJavaとstackoverflowにかなり慣れていないので、ばかげたことをしたらごめんなさい。また、メソッドや変数を変更することはできません。私はそれを実装することしかできません。

public abstract class AbstractDFA{

private String machineName;
private String alphabet;   

public AbstractDFA(String nameofmachine)
{      
  StringBuilder b = new StringBuilder();
  for (int i = 0; nameofmachine.charAt(i) != '.'; i++)
  {
    b.append(nameofmachine.charAt(i));
  }
  machineName = b.toString();

}

public AbstractDFA(String nameofmachine, String alphabet)
{
  this.alphabet = alphabet;
  this.machineName = nameofmachine;
  setAlphabet(this.alphabet);
}

public String toString()
{
  return "Machine Name: " + machineName + "\nAlphabet: " + getAlphabet();;  
}

public void setAlphabet(String alpha)
{
  StringBuilder beta = new StringBuilder();
  beta.append("{");
  for (int i = 0; i < alpha.length(); i++)
  {
    beta.append(alpha.charAt(i));
    if (i != (alpha.length() - 1))
    {
      beta.append(", ");
    }
  }
  beta.append("}");
  alphabet = beta.toString();
}

public String getAlphabet()
{
  return alphabet;
}
}

public class DFA は AbstractDFA を拡張します{

public DFA(String fileName){
  super(fileName);
  readDFA(fileName);
}

public DFA(String name, String alpha, int numStates, int start, int[][] delta, boolean[] finalstates){
  super(name,alpha);
  this.numberOfStates = numStates;
  this.start = start;
  this.delta = delta;
  this.finalStates = finalstates;
}
}
4

2 に答える 2

0
this.alphabet = alphabet;
setAlphabet(this.alphabet);

とにかくthis.alphabetそのフィールドを上書きするだけの場合、最初の割り当ての目的は何ですか? setAlphabetこれだけ:

public AbstractDFA(String nameofmachine, String alphabet)
{
  this.machineName = nameofmachine;
  setAlphabet(alphabet);
}

はるかに明確になります。

this.alphabet最初の行の後、 を呼び出す前にの値をチェックしていた場合は、単に期待どおりに機能していないsetAlphabet可能性setAlphabetがあります。

于 2013-04-07T16:32:59.273 に答える
0

抽象クラスには 2 つのコンストラクターがあり、最初のコンストラクターは setAlphabet() メソッドを呼び出しません。

于 2013-04-07T16:35:38.263 に答える