[英]Java, null point exception with split()
我在运行此命令时得到了nullpointerexcpetion。 它允许我输入所有输入字段,但会抛出空指针。 有人可以向我解释为什么这样做。 我认为这与split()有关。 以下是三个类别。 任何帮助都会很棒。 本质上,我想接受输入,将其拆分为一个数组,然后调用在特定索引处显示字符串。
//Main Class
public class StarWars {
public static void main(String[] args) {
getInput input = new getInput();
splitInput myInput = new splitInput();
input.firstName();
input.lastName();
input.maidenName();
input.cityName();
System.out.println(myInput.splitFirstName());
}
}
//second class
import java.util.Scanner;
public class getInput {
public String firstName;
private String lastName;
private String maidenName;
private String cityName;
Scanner user_input = new Scanner(System.in);
public void firstName(){
System.out.printf("Enter your First Name:");
firstName = user_input.next().trim().toLowerCase();
}
public String getFirstName(){
return this.firstName;
}
public void lastName(){
System.out.printf("Enter your Last Name:");
lastName = user_input.next().trim().toLowerCase();
}
public String getLastName(){
return this.lastName;
}
public void maidenName(){
System.out.printf("Enter your Mom's Maiden Name:");
maidenName = user_input.next().trim().toLowerCase();
}
public String getMaidenName(){
return this.maidenName;
}
public void cityName(){
System.out.printf("Enter your birth City:");
cityName = user_input.next().trim().toLowerCase();
}
public String getCityName(){
return this.cityName;
}
}
//Third Class
public class splitInput {
public String splitFirstName(){
getInput input = new getInput();
String x = input.getFirstName();
String[] splitValue = x.split("");
String myValue = splitValue[2];
return myValue;
}
}
对于那些好奇的评论者,确实发生了例外,因为x
为null
。
String[] splitValue = x.split("");
问题是您进行了所有调用以获取main
myInput
对象上的数据,但没有将其传递给splitFirstName
。 相反,您创建了一个全新的input
对象。
更改方法splitFirstName
以将input
作为参数。
//Third Class
public class splitInput {
public String splitFirstName(getInput input){
String x = input.getFirstName();
System.out.println(x);
String[] splitValue = x.split("");
String myValue = splitValue[2];
return myValue;
}
}
从main传递参数:
System.out.println(myInput.splitFirstName(input));
请注意,您的代码照原样将打印出名字的前三个字符。 如果这不是您的意图,则可能应该更改它。
同样, Java
约定是使用大写首字母来命名类,并使用名词而不是动词来命名类。
当您在主类中调用此语句时
System.out.println(myInput.splitFirstName());
您正在调用splitFirstName()
方法,并在其中创建一个新实例 getInput input = new getInput();
并从新实例中尝试获取其Null属性String x = input.getFirstName();
x值为null。
为了解决这个问题
将getInput对象传递给splitFirstName方法,传递给System.out.println(myInput.splitFirstName(input));
并将您的方法签名更改为public String splitFirstName(getInput input){
并注释新的实例语句
下面我修改了您的代码,它正在工作::
package com.test.punith;
导入java.util.Scanner;
公共类StackTest {
public static void main(String[] args) {
getInput input = new getInput();
splitInput myInput = new splitInput();
input.firstName();
input.lastName();
input.maidenName();
input.cityName();
System.out.println(myInput.splitFirstName(input));
}
}
类getInput {
public String firstName;
private String lastName;
private String maidenName;
private String cityName;
Scanner user_input = new Scanner(System.in);
public void firstName(){
System.out.printf("Enter your First Name:");
firstName = user_input.next().trim().toLowerCase();
}
public String getFirstName(){
return this.firstName;
}
public void lastName(){
System.out.printf("Enter your Last Name:");
lastName = user_input.next().trim().toLowerCase();
}
public String getLastName(){
return this.lastName;
}
public void maidenName(){
System.out.printf("Enter your Mom's Maiden Name:");
maidenName = user_input.next().trim().toLowerCase();
}
public String getMaidenName(){
return this.maidenName;
}
public void cityName(){
System.out.printf("Enter your birth City:");
cityName = user_input.next().trim().toLowerCase();
}
public String getCityName(){
return this.cityName;
}
}
//第三类class splitInput {
public String splitFirstName(getInput input){
//getInput input = new getInput();
String x = input.getFirstName();
String[] splitValue = x.split("");
String myValue = splitValue[2];
return myValue;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.