본문 바로가기
JAVA/IO

[java/FileInputStream] String list로 받아 integer list로 변경, 사용자 입력값과 로또 번호 확인

by java나유 2022. 6. 26.

사용자가 6개의 숫자를 입력하는 로또 프로그램 입니다.

프로세서 시작 시 숫자를 입력해주세요. 넣게 됩니다.

총 6번의 숫자를 입력받게됩니다.그리고 lotto.txt결과를 가진 파일을 로드하여

사용자가 입력한 값과 결과를 비교하여 몇개를 맞췄는지 검토하는 프로그램 코드를 작성하세요.

 

lotto.txt 

1,15,26,27,23,11

 

public static void main(String[] args) throws IOException { //Files 로드시 필수로 써주기

		Scanner sc = new Scanner(System.in);

		List<Integer> list = new ArrayList<>();// 데이터 로드
		List<Integer> list2 = new ArrayList<>();// 사용자 입력값
		int count = 0;
		try {
			List<String> data = Files.readAllLines(Paths.get("C:\\lotto.txt"));

			for (int i = 0; i < data.size(); i++) {
				list.add(Integer.parseInt(data.get(i))); //String list->int list 변환
			}
			for (int a = 0; a < list.size(); a++) {
				System.out.println("숫자를 입력하세요."); //메세지 출력
				int user = sc.nextInt(); //사용자 입력값
				list2.add(user); //사용자 입력값 배열로 받기
			}
			for (int ii = 0; ii < list.size(); ii++) { //lotto 설정 값 반복문
				for (int aa = 0; aa < list2.size(); aa++) { //사용자 입력 값 반복문
					if (list.get(ii) == list2.get(aa)) {
						count++; //맞은 개수 카운터
					}
				}
			}
			System.out.printf("맞은 개수는 %d개 입니다.", count); //메세지 출력
			sc.close(); //스캐너 닫아주기
		}
		catch (Exception e) {
			System.out.println(e);
		}
	}
}

결과값

일부러 [1,15,26,27,23,11]를 무작위 순서로 입력해보았습니다. 입력 순서와 상관없이 잘 출력되네요.

코드설명


1. List<String> data = Files.readAllLines(Paths.get("C:\\lotto.txt")); 

 Files.readAllLines(Paths.get) 메소드를 사용하여  List에 바로 호출하였습니다.

* Files.readAllLines(Paths.get)는 String List로 호출되기 때문에 integer List로 변경해주어야합니다.

 

2.for (int i = 0; i < data.size(); i++) {
list.add(Integer.parseInt(data.get(i)));  

*Integer.parseInt 메소드를 사용하여 String list 를 integer list로 변환했습니다.

이때는 =를 사용하지 않고 .add 메소드를 사용합니다. 이유는 배열이 아니라 list이기 때문입니다.

 

3.for (int a = 0; a < list.size(); a++) {
System.out.println("숫자를 입력하세요."); //메세지 출력
int user = sc.nextInt(); //사용자 입력값
list2.add(user); //사용자 입력값 배열로 받기

*마찬가지로, 사용자 입력값도  .add메소드를 사용하여  list2에 저장하였습니다.

 

4.for (int ii = 0; ii < list.size(); ii++) { //lotto 설정 값 반복문
for (int aa = 0; aa < list2.size(); aa++) { //사용자 입력 값 반복문
if (list.get(ii) == list2.get(aa)) {
count++; //맞은 개수 카운터

*list1와 list2는 1차 배열 형태의 list였기 때문에 내부 반복문안에 length가 아닌 외부 반복문과 동일한 형태인 size로설정했습니다.

 

*주의*

이렇게 파일을 로드하여 코드를 짤때는 main class에 꼭 

public static void main(String[] args) throws IOException를 넣어줍니다.

(예상치 못한 오류사항을 확인 해야하기 때문에)

동일 한 이유로, class안에서 try~catch를 사용합니다.

 

 
728x90

'JAVA > IO' 카테고리의 다른 글

[java/이미지 파일 용량제한] InputStream, byte, available()  (0) 2022.06.27
[java/File] image File road 정리  (0) 2022.06.27

댓글