簡體   English   中英

java,從方法返回空值

[英]java,returning null value from method

我需要為輸入運算符名稱返回 finalString 值。 其中,internalPrestring 是針對特定運算符固定的,internalDigit 將從獲取運算符名稱中檢索。然后所有的都將添加到 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);

    }
}

您只有四行處理CallManager類:

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而沒有其他任何內容。 所以所有其他變量都是空的,因為你沒有做任何處理或將它們初始化為某些東西的東西。

  3. 因此,當您打印clm.internalPreStringclm.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) 
}

你不認為你應該調用任何函數而不是使用對象的字符串變量嗎?

你只是調用一個函數

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) 

然后你會得到一些你期望的字符串......希望這會幫助你。

你從來沒有為那些你得到 NULL 值的變量設置值。在直接訪問屬性的地方必須使用術語 get/set。閱讀Java Programming Style GuideLines 以獲得更清晰的信息。使用適當的 getter 和 setter 來獲取和像您為 operatorName 所做的那樣設置值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM