[英]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.