我运行时得到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;
}
}
答案 0 :(得分:0)
对于那些好奇的评论,Exception确实发生在这一行,因为x
是null
。
String[] splitValue = x.split("");
问题在于您进行了所有调用以获取myInput
中main
对象的数据,但未将其传递给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
约定是使用大写的第一个字母命名类,并使用名词而不是动词来命名类。
答案 1 :(得分:0)
在主类
中调用此语句时System.out.println(myInput.splitFirstName());
您正在调用splitFirstName()
方法,并且在其中您正在创建新实例 getInput input = new getInput();
,并且从新实例中您尝试获取的属性空 .. String x = input.getFirstName();
这里x值为null。
解决这个问题
将getFirst对象传递给System.out.println(myInput.splitFirstName(input));
,并将方法签名更改为public String splitFirstName(getInput input){
并注释新实例语句
下面我修改了你的代码::;
package com.test.punith;
import 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));
}
}
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;
}
}
//第三类 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;
}
}