코트카타
17) 자연수 뒤집어 배열로 만들기
import java.util.*;
class Solution {
public int[] solution(long n) {
int n2 = (int)Math.log10(n)+1;
// String n2 = ""+n;
// int[] answer = new int[n2.length()];
int[] answer = new int[n2];
int i = 0;
while(n>0){
answer[i] = (int)(n%10);
n/=10;
i++;
}
return answer;
}
}
사실 다른 분의 풀이를 먼저 보았다.
처음부터 본 것은 아니다.
테스트 코드 실행까지는 값이 잘 나오는 것까지 확인했는데
여러 번 테스트 도중에 자꾸 실패가 났다.
1) 자릿수를 구하는 방법에 문제가 있나? -> 그렇지는 않았다.
2) answer[i] = (int)(n%10);
강제 형변환을 할 때 n만 하지 말고 괄호로 전체적으로 감싸주자
개인 과제 진행
Lv1
첫 번째 오류
Process 'command '/Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
Intellij, Gradle 환경에서 Java 코드 작성 후 실행 시 이런 에러가 나왔다.
- [ Intellij IDEA> Settings] 클릭 (맥 단축키 : Command + ,)
- [Build, Excution, Deployment > Build Tools > Gradle] 클릭
- Build and run using과 Run tests using을 Gradle(Default)->Intellij IDEA로 바꿔준다.
두 번째 오류
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
인덱스 값으로 마이너스 값을 대입하거나, 문자열 길이보다 큰 인덱스 값을 대입하면 발생한다고 한다.
출처 : https://livebyfaith117.tistory.com/120
=> 하지만, 나로서는 이 설명만 보고서는 바로 이해가 가지 않았다.
=> nextLine()으로 받았을 때 문제가 발생한 것 같다고 짐작할 뿐이다.
next()로 받았을 때는 오류가 발생하지 않았기 때문이다.
왜일까?
char operator = sc.next().charAt(0);
char operator = sc.nextLine().charAt(0);
* next() : 개행문자(\n)를 무시하고 입력 받음
즉, 숫자를 입력하고 엔터를 누를경우, 엔터 이전까지만 입력을 받음
* nextLine() : 한 줄 단위로 입력 받기 때문에, 개행문자(\n)도 한 줄로 인식함
char 타입의 경우 'A'과 같이 한 글자만 들어가야 하므로 오류 발생
출처 : https://limkydev.tistory.com/170
발제 후 점심 시간(12시) 전까지 작성한 코드
package com.example.calculator;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1;
int num2;
char calculator;
int result = 0;
String exit;
while(true){
System.out.print("첫 번째 숫자를 입력하세요: ");
// Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
num1 = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요: ");
// Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
num2 = sc.nextInt();
if(num1>=0 && num2>=0){
System.out.print("사칙연산 기호를 입력하세요: ");
// 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다.
calculator= sc.next().charAt(0);
switch(calculator){
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 == 0) {
System.out.println("나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다.");
break;
}
result = num1 / num2;
break;
default:
System.out.println("잘못된 연산자입니다. 다시 입력해주세요.");
break;
}
/* 제어문을 활용하여 위 요구사항을 만족할 수 있게 구현합니다.*/
System.out.println("결과: " + result);
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
/* exit을 입력 받으면 반복 종료 */
exit = sc.next();
if(exit.equals("exit")){
break;
}
}
}
}
}
레벨 1은 일단 여기서 마무리하고, 레벨 2를 3주차 강의 복습과 함께 진행하고자 한다.
=> 팀 내에서 회고를 진행했는데
nextInt()를 사용하면 문자 입력 시 에러가 발생한다고 말씀해주셨다.
예외처리(try catch) 4주차 강의 참고해서 작성해야겠다.
또한 나누기를 실행할 때, if else문보다는 예외로직을 나열하고, 정상로직을 먼저 써주면 좋을 것 같다고도 하셨다.
그리고 깃 사용을 연습해보라고도 하셨다.
Java 프로그래밍 기초 세션
클래스
= 틀, 설명서
생성자
* 1. 객체를 만들 때 어떻게 만들지 강제하는 놈
2. 클래스와 이름이 같다.
3. 반환 자료형이 없다(return type)
//클래스 = 틀, 설명서
Class User {
String email;
String password;
//생성자 : 회원가입 로직 만들 때, 아이디와 비밀번호는 필수로 넣어줘야 하니까 생성자로 만들기
User(String email, String password){
this.email=email;
this.password=password;
}
}
public class Main {
/* 중략 */
User user = new User("000@naver.com","1234");
}
이것으로 User 100.....개도 만들 수 있음
Java 문법 종합반
3주차
필드(속성) / 메서드(행위)
메서드 : 이 변수를 넣은 것을 제어할 수 있게 하는 것
생성자 - 이 변수를 넣은 이 필드들을 처음에 어떻게 정의할 것인가를 만드는 것
- 처음 객체가 생성될 때 (instance화) 어떤 로직을 수행해야 하며, 어떤 값이 필수로 들어와야 하는지 정의!
메서드 오버로딩
: 메서드의 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야 한다
오버로딩은 println()을 생각하면 편하다
기본형 매개변수 : 읽기만
참조형 매개변수 : 읽기+변경
클래스 멤버는 보통 고유값을 사용함
상수 static final 보통 대문자 사용
'CODING > 스파르타 내일배움캠프 TIL' 카테고리의 다른 글
17_정수 제곱근 판별_개인 과제 진행 Lv3 도전_25.1.6(월) (0) | 2025.01.06 |
---|---|
16_코트카타 문자열을 정수로 바꾸기_개인 과제 진행_25.1.3(금) (2) | 2025.01.03 |
14_코트카타_Java 문법 종합반 1,2,3주차_24.12.31(화) (1) | 2024.12.31 |
13_코트카타_팀 프로젝트 발표, 피드백, 회고_학습법 특강_자바의 정석 객체지향_24.12.30(월) (0) | 2024.12.30 |
12_삼항연산자_Git 특강 복습_방명록 코드복습_자바의 정석 객체지향_24.12.27(금) (1) | 2024.12.27 |