

### 前提・実現したいこと

変数 int num にシステムから入力値が与えられています。  
メソッドを作成し、mainにてそのメソッドを呼出し、戻り値の要素を全て表示する。  
その際、0番目の要素は表示しないように処理を実装する。  
また、戻り値がnullだった場合、要素の出力ではなく「指定されたIDは見つかりません」と出力する。  
メソッドの呼出しの際、実引数は変数 int num を設定する。

**入力値**

[code]

    1
    2
    3
    4
    
[/code]

**期待値**

[code]

    あいうえお
    かきくけこ
    さしすせそ
    
[/code]

**メソッドの内容**

[code]

    {"1","あ","い","うえお"}
    {"2","か","き","くけこ"}
    {"3","さ","し","すせそ"}
    
[/code]

上記の要素を持つ静的配列変数を3つ宣言する。  
数値型引数をString型変数に型変換する。  
各配列の0番目の値とString型に変換した引数を比較し、比較して一致した場合、一致した配列変数を戻り値とする。  
どの配列とも一致しなかった場合、nullを戻り値とする。

### 発生している問題・エラーメッセージ

> java.lang.NullPointerException

と表示される。  
nullが返ってきた際の処理がないことが原因だと思うのですが、色々調べてコードを書いてみましたがうまく処理することが出来ませんでした。  
助言を頂けると幸いです。

### ソースコード

[code]

    import java.util.Scanner;
    public class Main {
      public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String text = scan.next();
        int num = Integer.parseInt(text);
        String[] fuga = getUserProfile(num);
          for (int i = 1; i < fuga.length; i++){
            if (fuga[i] != null){
              System.out.println(fuga[i]);
            }else{
              System.out.println("指定されたIDは見つかりません");
            }
          }
      }
      static String[] getUserProfile(int num){
        String[] data1 = {"1","あ","い","うえお"};
        String[] data2 = {"2","か","き","くけこ"};
        String[] data3 = {"3","さ","し","すせそ"};
        String hoge = Integer.toString(num);
          if(data1[0] == hoge){
            return data1;
          }else if(data2[0] == hoge){
            return data2;
          }else if(data3[0] == hoge){
            return data3;
          }else{
            return null;
          }
      }
    }
    
[/code]


CC BY-SA 4.0
2019-09-17T07:16:55.337
59116
2019-09-17T09:11:32.693
2020-06-17T08:14:45.997
-1
35885
question
java
Java メソッド 引数 戻り値


くどい言い方かもしれませんが、まずどのステップでエラーになっているか、またnumに何を入力したか書いたほうがいいと思います。そのほうが説明しやすいかと思います。  
その上でですが、

[code]

    for (int i = 1; i < fuga.length; i++){ 
    
[/code]

で 「fuga」はNULLになっているかと思いますのでlengthを参照できません。その手前のステップでNULLの場合は

[code]

    System.out.println("指定されたIDは見つかりません");
    
[/code]

としてあげれば期待する動作になるかと思います。


CC BY-SA 4.0
2019-09-17T07:36:03.933
59117
2019-09-17T08:33:47.950
2019-09-17T08:33:47.950
3060
19858
59116
answer


文字列の比較に`==`を使っているからですね。全ての

[code]

     == hoge
    
[/code]

を

[code]

    .equals(hoge)
    
[/code]

に置換すれば、意図した動作をすると思います。ただし、この修正をした後も1、2、3以外の数値を入力すれば、以下の条件に入るのでNPEが発生します。

[code]

          }else{
            return null;
    
[/code]

それ以外にも直した方がいい箇所はいくつかあります。


CC BY-SA 4.0
2019-09-17T08:32:27.757
59121
2019-09-17T08:37:32.997
2019-09-17T08:37:32.997
21092
21092
59116
answer