-2

入力演算子名のfinalString値を返す必要があります。ここで、internalPrestringは特定の演算子に対して固定されており、internalDigitは演算子名の取得から取得されます。その後、すべての'emがfinalStringに追加されます。しかし、それはヌルを与えています、私は問題を理解することができません

 import java.io.*;
 import java.lang.*;

 class CallManager
 {


   public static final String postString = "#";

   StringBuilder stringBuilder;

   String internalPreString;
   String preString;
   String middleString;
   String finalString;
   String operatorName;


   int internalDigit;



   //needs to set oprator name
   public void setOperatorName( String getMeFromPreferences)
   {

    operatorName = getMeFromPreferences;
        System.out.println("I got it " + operatorName);
   }


//afeter having operator name need to set inrernal digit for each operator
public void setOperatorBasedInternalDigit(int getIntegerForOperator)
    {
        internalDigit = getIntegerForOperator;
        System.out.println("I got it too " + internalDigit);
    }

//it needs to get string from ocr  
public void setString( String getMeFromOCR )
    {
        middleString = getMeFromOCR;
    }


//preString creator for differnet operator
public String getOperatorBasedPreString(String operatorName)
{
        if(operatorName.equals("Airtel"))
        internalPreString = "787";

        else if(operatorName.equals("Banglalink"))
        internalPreString = "123";

        else if(operatorName.equals("Grameen"))
        internalPreString = "555";

        else if(operatorName.equals("Robi"))
        internalPreString = "111";

        else if(operatorName.equals("TeleTalk"))
        internalPreString = "151";


        stringBuilder.append("*").append(internalPreString).append("*");
        preString = stringBuilder.toString();

        return preString;

}

//get operator name and retrive midlle string's digit size from it
public int getOperatorBasedInternalDigit( String operatorName)
{

        if(operatorName.matches("^Airtel | Grameen | Robi$"))
        internalDigit = 16; 

        else if(operatorName.matches("^Banglalink$"))
        internalDigit = 14;

        else if(operatorName.matches("^TeleTalk$"))
        internalDigit = 13;


        return internalDigit;
}

//check operator-based digit number with input middle string as a number then retrive final string
public String getString( String toBeInserted, int inetrnalDigit)
    {

        if(toBeInserted.length() == internalDigit)
        {

            int counter = 0;
            char [] insertHere  = new char[internalDigit];

            for(int verifier = 0; verifier < internalDigit; verifier ++)
            {
                insertHere[verifier] = toBeInserted.charAt(verifier);
                    if(!Character.isDigit(insertHere[verifier]))
                    break;

            counter ++;
            }

            if(counter == internalDigit)
            {

                    stringBuilder.append(preString).append(toBeInserted).append(postString);
                    finalString = stringBuilder.toString();
                    //to see what i've got finally as input for using this call manager method.it would be removed too
                    System.out.println(finalString);
                    return finalString;
            }

            else
            {
                //this printing could be used in main program
                System.out.println("number is less or more than desired ..... INVALID SCAN");
                System.out.println(middleString);
                //here i will call the method for scan the card again
                //
                //
                   return middleString;
             }
          }


          else
              {
                //this printing could be used in main program
                System.out.println("number is less or more than desired ..... INVALID SCAN");
                System.out.println(middleString);
                //here i will call the method for scan the card again
                //
                //
                return middleString;
              }



    }


}


//tester class that CallManager works rightly or not
class CallManagerDemo
{
    public static void main(String args[]) throws IOException
    {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));



          System.out.println("Enter name of Operator");
          CallManager clm = new CallManager();

          clm.setOperatorName("Banglalink");
          System.out.println(clm.internalPreString);
          System.out.println(clm.preString);

    }
}
4

3 に答える 3

3

CallManagerクラスを扱う行は4行だけです。

CallManager clm = new CallManager();
clm.setOperatorName("Banglalink");
System.out.println(clm.internalPreString);
System.out.println(clm.preString);

nullになる理由:

  1. デフォルトのコンストラクター権限を使用しており、そこで処理が行われます。だからこれは問題ではありません
  2. setOperator次の行で、次のコードを持つメソッドを呼び出します。

    public void setOperatorName( String getMeFromPreferences)  
    {  
       operatorName = getMeFromPreferences;  
       System.out.println("I got it " + operatorName);  
    }
    

    ここでは、変数operatorNameを設定するだけで、他には何も設定していません。したがって、他のすべての変数は、それらを何かに初期化する処理や何かを実行していないため、nullになります。

  3. したがって、印刷するclm.internalPreStringと、clm.preString初期化されていないためnullになります。ただし、印刷clm.operatorNameしてみると、渡されてメソッド内で初期化された演算子名が出力されますsetOperatorName

クラス内で非常に多くのメソッドを定義したので、それらを使用して、すべての変数がロジックに従って設定されるようにします。

アップデート

public void setOperatorName( String getMeFromPreferences)  
{  
     operatorName = getMeFromPreferences;  

     //call any methods for example and use the values returned from the method by storing it inside a variable 
     String mystring = getOperatorBasedPreString(String operatorName) 
}
于 2012-11-22T05:22:59.600 に答える
0

オブジェクトを使用して文字列変数の代わりに関数を呼び出す必要があると思いませんか。

あなたはただ1つの関数を呼び出しています

public void setOperatorName(String getMeFromPreferences) {

        operatorName = getMeFromPreferences;
        System.out.println("I got it " + operatorName);
    }

変数を設定せずにデフォルトのコンストラクターを呼び出しています。フォームオブジェクトを呼び出している文字列を初期化していません。

私はあなたが関数のいずれかを呼び出すべきだと思います例えば

public int getOperatorBasedInternalDigit(String operatorName)

また

public String getString(String toBeInserted, int inetrnalDigit) 

次に、期待どおりに文字列を取得します...これがお役に立てば幸いです。

于 2012-11-22T05:23:11.940 に答える
0

NULL値を取得する変数の値を設定したことはありません。属性に直接アクセスする場合は、get/setという用語を使用する必要があります。Javaプログラミングスタイルのガイドラインを参照してください。 operatorNameに対して行ったように値を設定します。

于 2012-11-22T05:24:35.853 に答える