작성
·
160
답변 2
0
답변을 작성하다보니, 어느 부분에서 놓치신것인지 알것 같습니다.
향상된 for문을 사용할 경우, 아마 기대하신 동작과 다르게 동작하여 질문을 남겨주셨네요.
아래와 같은 코드가 있을 때, 향상된 for문을 순회하면서 배열의 아이템에 값을 담으면 될 것이라고 생각하신 것 같습니다.
public class RandomTest2 {
public static void main(String[] args) {
int[] Nums = new int[4]; // [0,0,0,0]
for (int num : Nums) {
num = 1; // 기댓값: [1,1,1,1]
}
for (int num : Nums) {
System.out.println(num);
}
}
}
하지만 결과를 직접 출력해보시면 아시겠지만,
결과는
1
1
1
1 이 아닌,
0
0
0
0
을 출력합니다.
첫 번째 향상된 for문에서 num 변수는 Nums 배열의 각 요소를 복사한 값입니다.
배열의 요소가 아닌 값에 1을 할당하므로 배열의 실제 값은 변경되지 않습니다.
따라서 두 번째 for문의 요소들을 출력할 때, 모든 값은 초기화된 값인 0을 출력합니다.
.
이 개념을 이해하셨다면 작성하신 아래의 코드에 왜 로또번호가 담기지 않았는지 이해되실거라 생각합니다.
private static void generator(int[] Nums) {
Random random = new Random();
for (int num : Nums) {
int randomNum = random.nextInt(45) + 1;
if (isUnique(Nums, randomNum)) {
num = randomNum;
}
}
}
코드를 단순화 하여 정리해서 보면 아래와 같습니다.
private static void generator(int[] Nums) {
Random random = new Random();
for (int num : Nums) {
num = random.nextInt(45) + 1; // 예) [5,17,2,35,11,33]
}
for (int num : Nums) {
System.out.println(num); // 실제 출력: [0,0,0,0,0,0]
}
}
앞선 0과 1의 예제와 동일한 관점으로 보시면 될 것 같습니다.
실제 코드로 확인(23~25번째 줄 추가)
출력 결과
향상된 for문의 이러한 문제를 해결하기 위해 인덱스 기반의 for문을 사용하셔야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
geonhee님의 질문과 관련하여, 로또 번호 생성 및 중복 확인 관련하여 비슷한 질문에 대한 답변을 찾았습니다.
이 질문에서는 LotteGenerator
클래스를 사용하여 로또 번호를 생성하는 과정과 final
키워드 사용의 이유를 묻는 질문입니다. 여기에 대한 답변에서는 final
키워드에 대한 설명과 함께 로또 번호 생성기의 설계에 대한 조언이 제공됩니다. 이는 geonhee님의 질문과는 직접적인 관련이 없어 보이지만, 로또 번호 생성기의 구조와 관련된 내용을 포함하고 있어 유용할 수 있습니다.
이 질문과 답변은 isUnique
메서드의 작동 방식과 관련된 내용을 다룹니다. 특히, isUnique
메서드의 로직을 이해하는 데 어려움을 겪는 질문자에게 구체적인 설명을 제공하여 로직의 이해를 돕습니다. geonhee님의 질문에서 발생한 0,0,0,0,0,0
출력 문제가 중복 검사 로직의 오류로 인한 것일 수 있어 본 내용이 도움 될 수 있습니다.
본 질문에서는 로또 번호를 오름차순으로 정렬하는 방법에 대한 설명을 찾을 수 있습니다. 이는 직접적으로 geonhee님의 문제 해결에는 기여하지 않지만, 로또 번호 생성 후 처리 방법에 대한 이해를 높이는데 도움 될 수 있습니다.
이 질문과 답변에서는 다른 방식으로 로또 번호 생성 로직을 구현한 예시와 그에 대한 피드백을 제공합니다. 비록 질문 내용이 geonhee님의 문제와 직접적으로 관련되지는 않으나, 다양한 로직 구현 방법에 대한 이해를 돕습니다.
질문 내용을 바탕으로 볼 때, 결과가 0,0,0,0,0,0
으로 출력되는 문제는 generator
메서드에서 유니크한 숫자를 Nums
배열에 올바르게 할당하지 못하는 로직 문제일 가능성이 높습니다. 특히, 이미 배열에 존재하는 숫자를 제외하고 새 숫자를 배열에 추가하는 로직을 재검토할 필요가 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이미 main()에서 int[] Nums를 선언하고
각 메서드에는 해당 배열을 입력할 수 있도록 설정하였는데
각 메서드마다 new int[]; 를 통해서 배열을 생성해주어야 한다는 말씀이신가요??
향상된 for문에서 Nums[i]의 값을 개별적으로 설정할 수 없어서
일반 for문으로 작성해야 하는 것으로 생각했는데
위와 같은 생각은 잘못된 생각인가요??