[英]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 的原因:
现在在下一行调用具有以下代码的setOperator
方法:
public void setOperatorName( String getMeFromPreferences) { operatorName = getMeFromPreferences; System.out.println("I got it " + operatorName); }
现在在这里您只设置变量operatorName
而没有其他任何内容。 所以所有其他变量都是空的,因为你没有做任何处理或将它们初始化为某些东西的东西。
因此,当您打印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)
}
你不认为你应该调用任何函数而不是使用对象的字符串变量吗?
你只是调用一个函数
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.