그전에 음식을 뭐뭐 주문했는지 표시하는거 넣기 전까진 성공함
근데 주문한 음식 목록을 출력하고 싶은데 이걸 출력하려고 좀 끼워넣었더니 에러났어...
빨간색으로 쓴 부분이 내가 새로 끼워넣었다가 에러난부분이야..
import java.util.Scanner; //Scanner를 쓰기 위해 해줌
public class project_01_2516 {
public static void main(String[] args) {
int sum=0; //음식값의 합계를 저장하기 위한 sum 변수를 선언하고 초기화.
int count=0;//음식 목록을 저장할때 쓰려고 만듦
String a[]=new String[count];//음식 목록을 저장할 배열
//메뉴판 프린트
System.out.println("****************************************************");
System.out.println("\t\t\t메뉴판");
System.out.println("****************************************************");
//이차원 배열 선언. 음식 이름과 가격이라는 두 가지 정보를 담고 있는 메뉴 10개를 입력하기 위한 10*2 배열 선언
String[][] menu= new String[10][2];
menu[0][0]="짜장면"; //이차원 배열에 메뉴 이름과 가격을 넣어줌.
menu[0][1]="3500"; //n행의 0번방에는 음식 이름,
menu[1][0]="짬뽕"; //1번방에는 가격을 넣어준다.
menu[1][1]="4000";
menu[2][0]="김밥";
menu[2][1]="1000";
menu[3][0]="케이크";
menu[3][1]="10000";
menu[4][0]="아이스크림";
menu[4][1]="3000";
menu[5][0]="족발";
menu[5][1]="12000";
menu[6][0]="불닭볶음면";
menu[6][1]="2000";
menu[7][0]="멕시칸바이트";
menu[7][1]="10000";
menu[8][0]="보신탕";
menu[8][1]="7000";
menu[9][0]="치즈떡볶이";
menu[9][1]="5000";
boolean signal; //while문을 돌리기 위해 boolean signal 변수를 만든다.
signal=true; //true 값을 대입하여 while문을 무한반복 할수 있게 한다.
while(signal){ //while문 무한반복
for(int i=0;i<menu.length;i++){
//i는 0, i가 배열 menu의 길이인 10보다 작은 수인 9가 될 때까지, i를 1씩 증가.
System.out.print(" "+ (i+1)+". "+ menu[i][0] + " "+ menu[i][1]);
//몇 번 메뉴인지, 메뉴 이름과 가격 표시
if((i+4)%3==0)
System.out.println();
//한 줄에 3개씩 표시하기 위해 써줌
}
for(int i=0;i<menu.length;i++){
//i는 0, i가 배열 menu의 길이인 10보다 작은 수인 9가 될 때까지, i를 1씩 증가.
Integer.parseInt(menu[i][1]);
//배열에는 같은 데이터형만 저장 가능하다. String 형으로 저장된 가격을 모두 int로 바꿔준다.
}
System.out.println();//보기 좋으라고 하는 엔터
System.out.println();//보기 좋으라고 하는 엔터
System.out.print("주문번호를 입력하세요 : ");
//주문번호 입력받기 위해 밑밥깔기
Scanner scan1 =new Scanner(System.in);
//Scanner로 데이터 입력받기 위해 만들어줌
int n = scan1.nextInt();
//int n에 입력받은 정수 대입
if(n>menu.length){//입력받은 n이 10을 초과한다면 팔지 않음
System.out.println("그런거 안팜!");
continue;
}
else //그 외의 경우엔(입력받은 n값이 1~10 사이의 숫자일 경우)
System.out.print(n+". "+menu[n-1][0]);//메뉴명 출력
++count;
a[count-1]=(menu[n-1][0]);
System.out.println();//보기 좋으라고 하는 엔터
System.out.print("주문수량을 입력하세요 : ");//수량 입력받기 위한 밑밥깔기
Scanner scan2 =new Scanner(System.in); //주문수량 입력받기 위해 해줌
int m = scan2.nextInt();
sum+=Integer.parseInt(menu[n-1][1])*m;
//총 가격 표시하기 위해 sum에다 주문한 메뉴의 가격*입력받은 수량 을 더해줌.
System.out.println();//보기 좋으라고 하는 엔터
System.out.println("계속 주문하시겠습니까?(y or n) : ");
//y 또는 n을 입력받아 계속 할건지 말건지 하기 위해 쓰는 말.
Scanner scan3 =new Scanner(System.in); //이번엔 정수가 아닌 문자열을 입력받는다.
String s = scan3.next();
if(s.equals("n")) //만약 String형 변수 s에 들어있는 값이 문자열 n이면
signal=false; //signal에 false를 대입해 while 문을 빠져나온다.
}
System.out.print("주문하신 음식은 ");
for(int i=0;i<a.length;i++){
System.out.print(" " + a[i] + "입니다.");
}
System.out.println();
System.out.println("주문하신 음식값은 총 " + sum + "원 입니다.");
//while 문을 빠져나온 후 주문한 총 음식 가격을 알려준다.
}
}//끝
ㅉㅉ
내 소견으로는 배열 이니셜라이즈 에러가 떳을거 같음
또는 인덱스 에러
++count; a[count-1]=(menu[n-1][0]);
이부분을 이렇게 코딩해야할거 같음
for(int i=0;i<a.length;i++) { a[i] = new String(); } 이런식으로 배열의 각 원소를 제대로 메모리에 할당해준 후에 ++count; a[count-1]=(menu[n-1][0]); 이걸로 배열의 원소에 값을 대입해야됨
ㄳㄳ 그렇게는 안했지만 답변 고맙다 다른방법으로 해결했어!