문제) java.lang.NullPointerException 에러 원인 설명 및 해답을 알려주세요!

 

기껏 테스트하고 올릴려고 했더니, 일이 들어와서 처리하고 보니 먼저 답변이 달렸다..

 

 

java.lang.NullPointerException 에러 원인 설명 및 해답을 알려주세요!



import java.util.Scanner;

class Food {
String name;
int price;
}

public class END_TEST1 {
public static void main(String[] args) {
Scanner scanf = new Scanner(System.in);
System.out.print("주문하고 싶은 음식의 수 >> ");
int limit = scanf.nextInt();
Food food[]= new Food[limit];
System.out.println("주문하고 싶은 음식의 수는 "+food.length+"개 입니다.");
for(int i=0; i<food.length; i++){
System.out.print((i+1)+"번째 음식의 이름 >> ");
food[i].name = scanf.next();
System.out.print((i+1)+"번째 음식의 가격 >> ");
food[i].price = scanf.nextInt();
}
}
}

 

 

java.lang.NullPointerException 에러 원인 설명 및 해답을 알려주세요!

 

 

 

 

먼저 달린 답변)

 

import java.util.Scanner;



class Food {


String name;

int price;


}



public class END_TEST1 {


public static void main(String[] args) {


Scanner scanf = new Scanner(System.in);

System.out.print("주문하고 싶은 음식의 수 >> ");

int limit = scanf.nextInt();

Food food[]= new Food[limit];

System.out.println("주문하고 싶은 음식의 수는 "+food.length+"개 입니다.");


for(int i=0; i<food.length; i++){

System.out.print((i+1)+"번째 음식의 이름 >> ");

food[i] = new Food();  // 에러의 원인은 배열은 생성했으나 객체를 배열안에 넣지 않았기 때문입니다.

food[i].name = scanf.next();

System.out.print((i+1)+"번째 음식의 가격 >> ");

food[i].price = scanf.nextInt();

}


}


}


 

내 답변)

 

배열에 객체를 생성해서 처리해야 합니다.

그리고 배열당 값이 2개 이니까 2차원 배열을 써주는게 좋을것 같습니다.

아래 빨간부분들을 참고하세요.

 

 

1. CLASS

 

import java.util.Scanner;

 

public class END_TEST1 {
  public static void main(String[] args){
  
    Scanner scanf = new Scanner(System.in);
  
    System.out.print("주문하고 싶은 음식의 수 >> ");
    int limit = scanf.nextInt();

 

    Food food[][] = new Food[limit][2];
    System.out.println("주문하고 싶은 음식의 수는 " + food.length + "개 입니다.");
  
    for(int i = 0; i < food.length; i++){
      System.out.print((i + 1) + "번째 음식의 이름 >> ");
      food[i][0] = new Food();  
      food[i][0].name = scanf.next();
   
      System.out.print((i + 1) + "번째 음식의 가격 >> ");
      food[i][1] = new Food();
      food[i][1].price = scanf.nextInt();
    }


    System.out.println();
    for(int i = 0; i < food.length; i++){
      System.out.println((i + 1) + "번 음식이름 : " + food[i][0].name + " / 가격 : " + food[i][1].price);
    }
  }
}

 

class Food{
  String name;
  int price;
}

 

 

2. RUN

 

주문하고 싶은 음식의 수 >> 2
주문하고 싶은 음식의 수는 2개 입니다.
1번째 음식의 이름 >> a
1번째 음식의 가격 >> 1000
2번째 음식의 이름 >> b
2번째 음식의 가격 >> 2000


1번 음식이름 : a / 가격 : 1000
2번 음식이름 : b / 가격 : 2000

 

 

쩝..