게시글
질문&답변
코드에 대한 피드백 부탁드립니다.
주신 코드를 바탕으로 삭제코드까지 구현하여 정리해보았습니다.메뉴가 정해져있다면 switch를 선호함. (개인취향)early return(얼리리턴)으로 실행되면 안되는 조건은 분기문 내에서 작동하기 전에 미리 튕겨내는 것을 목표로 둠. else if의 향연 보다 짤막한 if가 낫더라..상품 목록들을 보여주는 부분은 향상된 for문을 충분히 사용할 수 있으나 인덱스가 필요하다면 사용할 수 없다.조건문 안에 되도록이면 조건을 복잡하지 않게 두는 게 개인적으로는 나중에 다시 볼 때 더 좋더라구요. .eqauls 같은 것도 좋긴 하지만 타입미스매칭 에러보기 싫다고 런타임에러나 예기치못한 결과가 나오는 불상사가 나오면.. 진짜 골치아파서요. 당장 객체나 메서드를 사용하지 않고 배열만으로 구현해본다면.. 이렇게 짤 수 있을 것 같아 답글 남겨 봅니다. 원리라면 변수 옮겨담기와 비슷하다고 생각하시면 됩니다. 다음 배열에 있는 값을 삭제한 곳에 담는 것! 조건은 상품수량과 삭제할 품목 숫자 + 증가값이 같아지는 때까지..로 정했습니다. 그래야 순차적으로 다 옮길 수 있는 것 같아서요. 코드 첨부하며 이만 말을 줄입니다. package inflearn.array.ex2; import java.util.Scanner; public class Qna { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] productName = new String[10]; int[] productPrice = new int[10]; int productCount = 0; while (true) { System.out.println("1. 상품 등록 | 2. 상품 삭제 | 3. 상품 목록 | 4. 종료\n메뉴를 선택하세요."); int options = scanner.nextInt(); scanner.nextLine(); if (options == 1) { if(productCount == 10){ System.out.println("더 이상 상품을 동록할 수 없습니다."); continue; } System.out.print("상품 이름을 입력하세요: "); productName[productCount] = scanner.nextLine(); System.out.print("상품 가격을 입력하세요: "); productPrice[productCount] = scanner.nextInt(); productCount++; scanner.nextLine(); } else if (options == 2) { if(productCount 10){ System.out.println("올바른 품목의 번호를 입력해주세요."); continue; } for (int i = 0; i productCount || delNum
- 0
- 2
- 244
질문&답변
return;문과 boolean=false
조금 헷갈릴 수도 있을 것 같은데.. break가 반복문과 switch문에서의 쓰임이 비슷하다보니 생긴 문제인 것 같습니다. 분기문(조건문)에서 switch문은 각 조건에 해당하는 것만 실행하고 빠져나오게 되어있지만 if, if-else, .. else-if에는 해당하지 않습니다.그래서 두 번째 코드로 든 예시에서 if절 안에 있는 break를 만나면 if가 아닌 while문 자체를 빠져나가게 되어 루프가 끝납니다. (3)번 밖으로 나가죠. 아마 그 부분을 말씀하시고 싶으신 것 같은데 전달 중에 꼬인 것 같아 보입니다.요약하자면 "break는 반복문과 switch문 내부에 쓰였을 경우 1depths를 빠져나가게 하는 역할을 한다." 로 할 수 있습니다.
- 0
- 2
- 285
질문&답변
ArrayEx6 문제 질문입니다
for문 안에서 정수를 입력 받는 즉시 비교를 하여 max와 min값에 부여해도 결과 값이 크게 다르진 않을 것 같습니다. 다만, 현재 주어진 코드에서 max와 min 변수가 초기화되어있지 않아 비교에 문제가 발생할 것으로 예상됩니다. 유의할 부분이라면 그것을 제외하면 없을 것 같습니다.
- 0
- 2
- 68
질문&답변
배열 for문 할때 질문입니다
향상된 for문에서 얻어낸 출력값과 일반 for문에서 값을 얻어내기까지의 코드차이(길이 비교 등)를 비교하기 위해 이와 같은 방식으로 코드를 썼을 것이라 추측합니다. 단순히 해당 배열의 값을 출력하는 용도로는 큰 차이가 없습니다.
- 0
- 2
- 92
질문&답변
배열에 대한 질문
개인적으로 int i의 초기값을 0으로 둬야한다는 강박만 벗어나도 훨씬 코드가 간결해질 것이라고 생각합니다. (int를 1로만 잡아도 if문과 그 안에 들어있는 내용이 대폭 줄어들꺼라 생각합니다.)그래도 덕분에 새로운 생각을 많이 하게 되어 즐겁습니다. 제가 짠 코드 중 핵심 부분만 붙여놓고 가겠습니다. ... System.out.println("students["+0+"] = " + students[0]); for (int i = 1; i
- 0
- 2
- 425
질문&답변
scanner 두번째 문제(홀수짝수) 질문드립니다!
참고가 될지 모르겠지만 저는 이런 방식으로 짜보았습니다. 홀수인지 짝수인지 분간하는 부분을 굳이 if로 구분하지 않고 삼항연산자를 이용해 구분하였습니다.주석친 부분은 제가 임의적으로 숫자를 받을 때 0보다 큰 숫자(자연수)에 한해서만 짝수와 홀수를 분간하고 싶어서 추가한 것이니 신경쓰지 않으셔도 됩니다. Scanner scanner = new Scanner(System.in); System.out.print("하나의 정수를 입력하세요: "); int number = scanner.nextInt(); /* if (number > 0) {*/ String con = ( (number % 2) == 0 ? "짝수" : "홀수"); System.out.println("입력한 숫자 " + number + "는 " + con + "입니다.");
- 0
- 2
- 262
질문&답변
스캐너 사용하는 문제풀이중 에러코드
Scanner.nextInt(); 가 아닌 scanner.nextInt()로 쓰셔야 합니다. 오타로 인한 오류입니다. (대소문자 오류) 설명을 붙이자면 Scanner라는 객체를 선언한 이후 또 Scanner라는 객체를 쓰려고 하기 때문입니다.객체 변수로 선언한 scanner에 정의된 nextInt()를 써야하는 상황에서 다짜고짜 변수를 선언하는 것으로 착각하여 문제가 일어났다고 생각합니다.
- 0
- 3
- 134
질문&답변
Scanner 학습 관련
오류를 보고 싶다면 "정수를 입력하세요" 에서 15.023 와 같은 실수를 입력해보면 알 수 있습니다. 이전에 형변환 단원에서 배웠듯이 int(정수)타입은 double(실수)로 자동 형변환이 되나, double(실수)타입은 int(정수)로 자동 형변환되지 않기 때문입니다.실수를 입력하는 부분에서 15와 같은 정수로 입력하면 단연 자동으로 형변환이 이루어질 것입니다.
- 0
- 2
- 125
질문&답변
Casting3 클래스에서 maxIntValue 값
아쉽게도 컴퓨터가 10진법이 아닌 이진법으로 계산하는 녀석이기 때문에 가능한 일이라 생각합니다. 그대로 뚝 떼서 옮겨도 문제 없는데 형변환 표시를 강제적으로 해야하나 하는 생각이 들 수 있지만 long형태와 int 형태에서 자료를 저장하기 위해 필요한 비트 수 자체가 다릅니다. 인텔리제이 같이 작업환경 내에서 컴파일하기 전에 문제가 있을 부분을 지적해서 이를 대비할 수 있는 것이지 실제 자바 컴파일러가 컴파일 하기 전부터 상황을 전부 알고 융통성있게 행동하지 않기 떄문이라고 생각합니다.똑같은 양의 물이지만 큰 그릇에서 작은 그릇으로 온전히 옮기려 할 때 깔대기를 쓰는 것 처럼, 일종의 보증이라 생각해도 괜찮다고 생각합니다. 작은 그릇에서 큰 그릇으로 담는 것은 문제가 될 일이 없지만(묵시적 형변환), 큰 그릇에서 작은 그릇으로 담을 때 작은 그릇의 담긴 액체가 넘치지 않는다는 보장은 못하지 않습니까.(명시적 형변환)
- 0
- 2
- 100
질문&답변
While1_2 질문 있습니다
아래 답변과 비슷하겠지만 강사님이 말씀해주신 부분에 크게 벗어나지 않게 설명할 방법이 있어서 하나 적어봅니다.강사님은 전위 증감 연산자, 후위 증감 연산자에 연산과정에 이해를 돕기 위해 이렇게 설명해주셨습니다.X = ++Y; 인 경우, Y = Y + 1; X = Y; 와 같이 표현할 수 있습니다. 먼저 더하고 그 다음 대입합니다.X = Y++; 인 경우, X = Y; Y = Y + 1;와 같이 표현할 수 있습니다. 먼저 대입한 후 그 다음 더합니다.조건식에서도 말씀하셨지만 변수에 담긴 값(리터럴)로 치환된 후 변수에 대입되는 것을 보셨을 겁니다. 그 전위 증감과 후위 연산에 차이를 만든다고 생각합니다.count = count++;로 놓고 보면 헷갈리니, 같은 값을 담고 있는 int A를 가지고 설명하겠습니다.int count = 0; int A = 0; while(count > 1){ count = A++; }이것은 앞에서 설명하였듯,count = A;A = A + 1; 과 같습니다.count= 0;A = 0 + 1; 로 치환이 가능합니다.count은 이미 0이 대입한 채로 끝나며, A의 값은 1이지만 count 변수와는 상관없게 됩니다.[ 전위 증감연산자였다면?count = ++A;A = A + 1;count = A;A = 0 + 1;count = (0 + 1);count = 1;]크게 상관없는 답변일지도 모르겠지만, 질문자님이 주신 질문을 강사님께서 이전에 설명하셨던 방법으로 설명이 가능할까 싶어 적어봅니다.
- 1
- 2
- 116