- 질문 게시판입니다.
Date 17/10/19 15:33:52
Name   二ッキョウ니쿄
Subject   자바 질문입니다
package com.ex11market;
[메인클래스]
public class MarketMain {
static Goods[] g = { new Goods("g01", "레쓰비", 25, 900), new Goods("g02", "박카스", 25, 700),
new Goods("g03", "ABC초콜릿", 25, 1600), new Goods("g04", "크리넥스", 25, 2000),
new Goods("g05", "전자담배", 25, 90000) };
static Customer[] c = { new Customer("010-1111-1111", "서울이", "10-10"),
new Customer("010-1212-1212", "고려놈", "10-18"), new Customer("010-1313-1313", "연세놈", "01-11"),
new Customer("010-1414-1414", "서강이", "02-27"), new Customer("010-1515-1515", "세종이", "06-30") };

public static void main(String[] args) {
sell("g05", "1515", 3);
sell("g02", "1212", 5);
}

private static void sell(String gCode, String subTel, int su) {
int i, gIndex, cIndex;
for (i = 0; i < g.length; i++) {
if (g[i].getgCode().equals(gCode)) {
break;
}
}
if (i == g.length) {
System.out.println("상품코드가 잘못 되었습니다");
return;
}
gIndex = i; // 상품이 가르키는 곳의 인덱스
for (i = 0; i < c.length; i++) {
String tel = c[i].getTel();// 010-9999-9999
if (tel.substring(9).equals(subTel)) {
break;
}
}
if (i == c.length) {
System.out.println("전화번호가 잘못 되었습니다. 회원가입하시죠");
return;
}
cIndex = i; // 고객을 가르키는 곳의 인덱스
int tempSu = g[gIndex].getStock() - su;
if (tempSu < 0) {
System.out.println("재고량이 부족합니다. 죄송합니다.");
System.out.println("사장님!" + g[gIndex].getgName() + "얼른 주문하세요");
return;
}
g[gIndex].setStock(tempSu);
String gName = g[gIndex].getgName();
int price = g[gIndex].getPrice();
c[cIndex].buy(gName, price, su);
}

}

[상품클래스]
public class Goods {
private String gCode;
private String gName;
private int stock;
private int price;
public Goods() {
}
public Goods(String gCode, String gName, int stock, int price) {
this.gCode = gCode;
this.gName = gName;
this.stock = stock;
this.price = price;
}
public String getgCode() {
return gCode;
}
public void setgCode(String gCode) {
this.gCode = gCode;
}
public String getgName() {
return gName;
}
public void setgName(String gName) {
this.gName = gName;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}

}

[고객클래스]

import java.text.SimpleDateFormat;
import java.util.Date;

public class Customer {
private String tel;
private String cName;
private int money;
private int point;
private String birth;
private boolean vip;
public Customer() {
}
public Customer(String tel, String cName, String birth) {
this.tel = tel;
this.cName = cName;
this.birth = birth;
money = 0; point = 0;
}
public void changedTel(String cName,String tel) {
this.tel = tel;
}
public void buy(String gName, int price, int su) {
if(price<0) {
System.out.println("구매금액이 잘못되었습니다");
return;
}
money += price*su;
int thispoint = (int)(price*su*0.1);
point += thispoint;
if(money>=1000000 && vip == false) {
vip = true;
System.out.println("vip가 되셨습니다");
}
msgBirth();
System.out.println(gName+""+su+"개 *"+price+"원 = "+(price*su));
System.out.println("이번 누적 포인트는 "+thispoint+"원 입니다");
System.out.println(cName+"고객님 포인트 합계 : "+point+"원");
System.out.println("★ ★ ★ 감  사  합  니  다 ★ ★ ★");
}
public void msgBirth() {
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
String today = sdf.format(now);
if(birth.equals(today)) {
System.out.println(cName+"님 생일 축하드립니다");
point+=3000;
System.out.println("생일 기념으로 3000포인트가 적립됩니다");
}
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
}
[콘솔창 결과물]

전자담배3개 *90000원 = 270000
이번 누적 포인트는 27000원 입니다
세종이고객님 포인트 합계 : 27000원
★ ★ ★ 감  사  합  니  다 ★ ★ ★
박카스5개 *700원 = 3500
이번 누적 포인트는 350원 입니다
고려놈고객님 포인트 합계 : 350원
★ ★ ★ 감  사  합  니  다 ★ ★ ★

=================================================================================

안녕하세요 자바 4주차 공부중인 코린이입니다.
슈퍼마켓에서 배열등을 이용해 콘솔창에서 물건을 사고 재고랑 가격, 포인트 등을 만드는 코드를 짰는데요
제가 배운 영역에서 어떻게 더 리팩토링해서 보기 좋고 더 나은 ? 상태로 만들어야 할지 더 알수가 없어서 질문드립니다.
혹시 어떤식으로 고치는게 좋을까요?
제반지식은 본문에 쓰인 코드랑 싱글턴, 스트레터지 패턴, 대표적인 api 몇가지랑 추상화,인터페이스, 상속, 접근제한자 및 기본적인 변수 연산자 제어문 배열정도입니다..

깔끔하게 올릴 방법을 몰라서 이렇게 올리는데 도움 주시면 감사드리겠습니다.



0


간단한 프로그램이라 리팩토링할 거리가 별로 없어보이기는 하는데

1) 변수명..
private static void sell(String gCode, String subTel, int su) ~{
이런식으로 쓰지 마시구요

private static void sellGoods(String goodsCode, String lineNumber, int buyingCount)

리팩토링은 함수명 변수명만 잘지어도 반은 먹고들어갑니다.

2)
int i, gIndex, cIndex;
 for (i = 0; i &lt... 더 보기
간단한 프로그램이라 리팩토링할 거리가 별로 없어보이기는 하는데

1) 변수명..
private static void sell(String gCode, String subTel, int su) ~{
이런식으로 쓰지 마시구요

private static void sellGoods(String goodsCode, String lineNumber, int buyingCount)

리팩토링은 함수명 변수명만 잘지어도 반은 먹고들어갑니다.

2)
int i, gIndex, cIndex;
 for (i = 0; i < g.length; i++) ~{
  if (g[i].getgCode().equals(gCode)) ~{
  break;
  }
 }
if (i == g.length) ~{
 System.out.println("상품코드가 잘못 되었습니다");
 return;
}
gIndex = i; // 상품이 가르키는 곳의 인덱스

이렇게 하지 마시고.. for문 iterator로 쓰는 변수를 for문 밖에서 쓰는건 좋은 습관은 아니에요.
아마 문제에서 번호가 겹치는 데이터가 2개 이상 있지는 않다고 가정되어있나 보네요. 아니면 겹치는 데이터들이 있으면 가장 먼저 등록된 걸 리턴하거나..

int i;
int goodsIndexFound = -1;
for (int i=0; i<g.length; i++) ~{
 if (g[i].getgCode().equals(gCode)) ~{
  goodsIndexFound = i;
  break;
 }
}
if (goodsIndexFound == -1) ~{
throw new GoodsNotFoundException("입력하신 코드에 맞는 상품이 없습니다!");
}


3)

if(money>=1000000 && vip == false) ~{

상수 쓰지마시고..

private static final int VIP_POINT_THRESHOLD = 1000000;

if(money >= VIP_POINT_THRESHOLD && isVIP == false) ~{
이런식으로..
二ッキョウ니쿄
감사합니다 ㅠ ㅠ참고해서 고쳐보겠습니다
2번의 경우에는 int i 선언을 for안으로 넣으니까 그 뒤에 i를 한꺼번에 이용했던 것들이 다 에러나서 다 따로 다시 선언해줘야 하는건가요 한꺼번에 에러가 나서 뇌정지오네욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ간단한 프로그램도 코린이에겐 넘나 복잡한것
유리소년
아 오타났네요. for 안에 int i 에서 int는 빼셔야
목록
번호 제목 이름 날짜 조회 추천
10022 IT/컴퓨터(진지)삼성qhd 32인치 모니터 지를까요? 24 방사능홍차 20/08/29 3741 0
2275 문화/예술문희준 표절여부에 대해서 6 조홍 17/02/08 3742 0
2565 의료/건강(초)미세먼지는 얼마나 유해한가요 6 Select 17/03/27 3742 0
3881 기타경주시 관련 질문 24 SpicyPeach 17/12/22 3742 0
7100 기타 여자분들과 지적인 대화를 하면 어떤 주제로 이야기하시는지요...? 23 [익명] 19/05/12 3742 0
9228 경제긴급재난지원금을 받으면 어디에 쓰실 건가요? 13 [익명] 20/04/21 3742 0
3727 게임게임 방송 잘아시는 분 계신가요? 3 사람사람 17/11/22 3743 0
6115 경제이번에 선정된 신도시 근처에 살고 있습니다. 어떤 영향이 있을까요? 3 아재 18/12/19 3743 0
8577 문화/예술부모님과 볼 영화 추천 부탁드려요. 3 [익명] 20/01/02 3743 0
9398 기타심리상담센터 추천 부탁드립니다. 2 [익명] 20/05/13 3743 0
553 기타tv 유료 스트리밍 어플 가격 관련해서.. 5 얼그레이 15/12/01 3744 0
872 기타사이트 오류 질문입니다. 8 새벽 16/02/29 3744 0
3836 여행부모님과 함께 2월 초 오키나와 3박 4일 여행 예정입니다. 조언 부탁 드립니다. 6 Rosinante 17/12/13 3744 0
4789 여행여권갱신 급질문합니다. 2 Darwin4078 18/06/09 3744 0
6761 기타고기가 익으면 어느정도나 가벼워질까요? (저는 진상이었을까요?) 19 [익명] 19/03/13 3744 0
6995 게임가볍게 할만한 스위치 게임 추천받습니다 13 sound And vision 19/04/22 3744 0
8890 기타바지 허리 쪽 여닫이 명칭 10 [익명] 20/03/02 3744 0
8924 게임POE 게임 어떤지 질문입니다. 3 불타는밀밭 20/03/08 3744 0
9033 기타베개 질문입니다 2 김치찌개 20/03/21 3744 0
10245 의료/건강오메가3 으깨서 먹어도 상관없나요? 9 [익명] 20/10/10 3744 0
712 기타아이폰 질문 좀 할게요 3 도라에몽 16/01/12 3745 0
5896 가정/육아수면 교육 궁금증 4 별빛 18/11/15 3745 0
5937 기타청첩장 업체 추천해주실만한 곳 있을까요?? 4 원스 18/11/21 3745 0
13858 법률주택임대차보호법 계약갱신 관련 질문 있습니다. CrankyBubble52 22/09/12 3745 0
2732 체육/스포츠갑자기든 생각인데요...한한만두에서... 10 사나남편 17/05/01 3746 0
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글