簡體   English   中英

Java,帶有split()的空點異常

[英]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;
    }
}

對於那些好奇的評論者,確實發生了例外,因為xnull

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM