我正在编写Java代码,如果输入国家/地区名称,会话应将属性设置为相应的国家/地区代码,否则不应保存会话。
以下是我的代码
临时班级
package onlyJava;
import java.util.Locale;
import java.util.Scanner;
import com.amazon.speech.speechlet.Session;
public class Temp {
String cityName;
public void getTheCurrentWeather(Session session) {
System.out.println("Enter a city Name\n");
Scanner sc = new Scanner(System.in);
cityName = sc.next();
getCountryCode(cityName, session);
System.out.println(session.getAttribute("cCode").toString());
}
public String getCountryCode(String countryName, Session session) {
System.out.println(countryName + "\t" + session);
String result = "";
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
if (countryName.equals(obj.getDisplayCountry().toString())) {
result = obj.getCountry();
session.setAttribute("cCode", result);
}
}
return result;
}
}
测试类 (主要)
package onlyJava;
import com.amazon.speech.speechlet.Session;
public class Test {
public static void main(String[] args) {
Temp temp = new Temp();
temp.getTheCurrentWeather(null);
}
}
当我使用输入印度 国家运行此代码时,我得到以下结果。
India null
Exception in thread "main" java.lang.NullPointerException
at onlyJava.Temp.getCountryCode(Temp.java:30)
at onlyJava.Temp.getTheCurrentWeather(Temp.java:16)
at onlyJava.Test.main(Test.java:10)
当我输入 Hyderabad City 时,我得到以下结果。
Hyderabad null
Exception in thread "main" java.lang.NullPointerException
at onlyJava.Temp.getTheCurrentWeather(Temp.java:17)
at onlyJava.Test.main(Test.java:10)
请让我知道我哪里出错了,我该怎么办呢。
由于
答案 0 :(得分:0)
在这两种情况下都会抛出NPE,因为你在从main函数调用getWeather方法时给出了一个null作为参数。
主类期望接收非空的Session实例,并且永远不会检查它是否为null。
在India
测试用例中,从getCountry()方法抛出NullPointerException,因为India实际上是一个有效的国家/地区,因此该方法会尝试在会话对象中记下它的相应国家/地区代码。就在它落入NPE的那一刻。
在第二种情况下,由于Hyderabad不是国家/地区,因此会话中不会写入任何内容,并且在尝试从空会话实例恢复会话属性时会抛出NPE。
如果在测试类的主方法中传递有效的Session实例
,则两个错误都将得到修复