String은 new 없이 객체 생성이 가능하다.
객체를 생성하면 문자열과 String API도 함께 객체에 들어간다.
String str2 = "good"; > 객체가 생성된것
str2.length(); : 문자열 개수
str2.toLowerCase(); : 문자열을 소문자로 변환
str2.toUpperCase(); : 문자열을 대문자로 변
import java.util.Scanner;
class Output{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans1 = sc.next();
if(ans1 == ans1.toUpperCase())
System.out.print(ans1 + "는 대문자 입니다.");
else
System.out.print(ans1 + "는 대문자가 아닙니다.");
System.out.println();
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans2 = sc.next();
if(ans2 == ans2.toLowerCase())
System.out.print(ans2 + "는 소문자 입니다.");
else
System.out.print(ans2 + "는 소문자가 아닙니다.");
System.out.println();
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans3 = sc.next();
int num = Integer.parseInt(ans3);
if((num >= 0 && num <= 9))
System.out.print(num + "는 숫자입니다.");
else
System.out.print(num + "는 숫자가 아닙니다.");
}
}
import java.util.Scanner;
class Output{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans1 = sc.next();
if(ans1 == ans1.toUpperCase())
System.out.print(ans1 + "는 대문자 입니다.");
else
System.out.print(ans1 + "는 대문자가 아닙니다.");
System.out.println();
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans2 = sc.next();
if(ans2 == ans2.toLowerCase())
System.out.print(ans2 + "는 소문자 입니다.");
else
System.out.print(ans2 + "는 소문자가 아닙니다.");
System.out.println();
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans3 = sc.next();
try{
Integer.parseInt(ans3);
System.out.print(ans3 + "는 숫자입니다.");
}catch(NumberFormatException e){
System.out.print(ans3 + "는 숫자가 아닙니다.");
}
sc.close();
}
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
String str;
char ch;
int diff = 'a' - 'A';
System.out.println("문자입력");
Scanner sc = new Scanner(System.in);
str = sc.nextLine();
ch = str.charAt(0);
if(ch >= 'A' && ch <= 'Z') System.out.println("대문자 입니다.");
else if(ch >= 'a' && ch <= 'z') System.out.println("소문자 입니다.");
else if(ch >= '0' && ch <= '9') System.out.println("숫자 입니다.");
else System.out.println("입력값은 영숫자가 아닙니다.");
sc.close();
}
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
String str;
char ch;
int diff = 'a' - 'A';
System.out.println("문자입력");
Scanner sc = new Scanner(System.in);
str = sc.nextLine();
ch = str.charAt(0);
if(ch >='A' && ch <='Z') System.out.println((char)(ch+diff));
else if(ch>='a' && ch <= 'z') System.out.println((char)(ch-diff));
else System.out.println("입력값은 알파벳이 아닙니다.");
sc.close();
}
}
import java.util.Scanner;
class Output{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.print("영어 및 숫자를 입력하세요 : ");
String ans1 = sc.next();
if(ans1 == ans1.toLowerCase())
System.out.print(ans1.toUpperCase());
sc.close();
}
}
-API이용해서 비교해서 변환하는 방법을 택했는데 선생님이 해주신것은 너무 어렵다..
Integer.toBinaryString(10);을 출력하면 1010 > 정수로 받아서 2진수로 변환
String변수명.substring(3)>변수에 들어있는 문자열을 3번째 이후 문자부터 출력한다.
십진 정수를 입력받아 4바이트의 이진수로 출력하시오.
예시
숫자 입력
10
00000000000000000000000000001010
import java.util.Scanner;
class Binary{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.print("2진수로 출력할 정수를 입력하세요 : ");
int num = sc.nextInt();
System.out.println(Integer.toBinaryString(num)); //1번 문제
}
}
2번 문제 ) 4비트의 2진수를 어떻게 출력해야할지 몰랐는데 그냥 애초에 32개의 0을 만들고 입력받은 2진수를 더해서 그 더한 자리 수 만큼 빼서 출력하는거였다..
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = "00000000000000000000000000000000";
System.out.println("숫자 입력");
int temp = sc.nextInt();
String binStr = Integer.toBinaryString(temp);
// String strNum = sc.nextLine(); >
// String binStr = Integer.toBinaryString(Integer.parseInt(strNum));
String tmp = s1 + binStr;
System.out.println(tmp.substring(binStr.length()));
}
}
// String strNum = "5";
// int num = Integer.parseInt(strNum);
// 문자열을 "5"를 int 5로 바꿔서 반환한다.
Integer.parsInt() > 문자열을 정수로 변경
Integer.toBinaryString() > 정수를 이진수로 변 경
만약 사용자 입력을 정수가 아닌, 문자열로 입력받는다면(주석)
정수형일때 2진수로 변환할 수 있으므로, 문자열 > 정수형 변환하고
이렇게 문자형으로 받으면 값을 총 3번 변환해야하기 때문에 정수형으로 입력받는게 더 좋다.

x가 2일때
1 + X << 33 은 x의 값이 2이므로 1 + 2 << 33 이 된다. 덧셈연산자가 시프트 연산자보다 우선순위가 높으므로 3 << 33이 된다.int는 4byte로 32bit이므로 33번 쉬프트 하지 않고, 1번만 쉬프트 한다.
3 << 1은 3에 '2의 1제곱' 인 2를 곱하는 것과 같은 의미므로 3 * 2가 되어 6이 된다.
이항 연산자는 피연산자가 int보다 작은 타입(byte, short, char)인 경우 int로 변환 후 연산을 수행한다.
c가 소문자 c인줄 생각했다.. 문제를 제대로 읽지 않아 생긴 이슈

그냥 나누기만 수행하고 +1 을 했다
나머지가 생기면 1을 더하고, 생기지 않으면 더하지 않는 문장을 빼먹었다


둘이 나누어 나머지가 발생한 값을 0으로 주고 싶었는데, 방법을 몰라 실패
100으로 나누면 100의자리 숫자는 4가 남고 그대로 100을 곱하면 나머지 숫자들은 자동으로 버려지게 된다.


나머지 연산자가 빼기보다 우선순위가 더 높기 때문에 먼저 수행된다,
결국 10의 자리는 10의 배수이기때문에 나머지를 구해서 10으로 빼면 되는 문제였다.

5/9 는 0 이다 > 정수 / 정수 = 정수
소수점이 나오게끔 해야하기 때문에 float으로 형변환 시켜주고(5/9f)
이렇게 5/9f * (fahrenheit - 32) 가 화씨를 섭씨로 바꾸는 공식이고 여기서 소수점 둘째까지니까
공식에 *100 을 해주고(소수점 둘째까지니) 에 +0.5를 더해서 지금 현재 나온 소수점이 5이상이면 5를 더해 반올림이 되게 해주고
(int)로 형변환을 해서 소수점 밑에를 다 없애주고 100f로 나눠서 본래 소수점 자리로 돌아오고 소수점 뒤는 반올림한 수로 출력되는것이다.

integer보다 작은 타입들이 연산을 하면 int로 자동형변환이 일어난다.
float. long형은 리터럴 뒤에 F,L을 붙이지 않으면 int
byte에 int가 들어갈 수 없으므로 강제형변환 시킨다
char와 int는 더하기x(자료형 다름) > 연산하면 int로 자동형변환
하나만 형변환해도, int이기 때문에 자동으로 형변환 된다. 3f/2f도 가능하긴 하다
int에 저 곱한값들을 넣을 수 없기 때문에 리터럴에 L을 넣어서 형변환
double과 float도 형변환 없이 연산이 일어날 수 없기 때문에 float으로 강제형변환 시킨다.

최대 범위보다 큰 수를 발생시키는 경우 발생하는 현상
public class Test {
public static void main(String[] args) {
byte num = 127; // -128 ~ 127
// num = (byte)(num + 1);
// System.out.println(num); // -128
num++;
System.out.println(num);
}
}
최소 범위보다 작은 수를 발생시키는 경우 발생하는 현상
public class Test {
public static void main(String[] args) {
byte num = -128;
num--;
System.out.println(num); // 127
// num-=2;
// System.out.println(num); // 126
// num-=3;
// System.out.println(num); // 125
}
}
반올림하는 메소드
class Test {
public static void main(String[] args) {
System.out.println(Math.round(5.3)); //5
System.out.println(Math.round(5.6)); //6 > 반올림 되어서
}
}
//Math.round 반올림
0이상 1미만의 실수 값을 랜덤(난수)으로 발생시키는 메소드
초기값은 실수이나, 정수로 형변환 시킨 후 원하는 값 사이에서 랜덤으로 정수를 리턴하도록 설정 가능
(int)(Math.random()*100+1) > 1 ~ 100 사이의 값을 랜덤해 리턴
(int)(Math.random()*6)+ 3) > 3 ~ 8사이의 값을 랜덤 리턴
(int)(Math.random()*29+17) > 17~ 45사이의 값을 랜덤 리턴
public class Test2 {
public static void main(String[] args) {
for(int i=0;i<10;i++)
{
System.out.println((int)(Math.random()*3));
}
}
}
math.random()*3 을 int로 형변환해서 0이상 3미만의 정수 난수 발생
Math.random()*10 + 1 하나의 메소드 이름으로 여러 개의 메소드를 만들 수 있게 해주는 기법
메소드 이름이 같아야한다.
매개 변수의 개수와 자료형은 달라야 한다.
리턴타입이 달라도 매개변수가 같으면 오버로딩 x

c언어에서는 문법적 오류가 나지만 java는 가능하다.
메인 메소드에서 객체 생성 후 호출해서, 값을 넣으면 그 값과 맞는 매개변수에 들어간다.(매개변수의 개수, 자료형에 따라)
주의할점 : 메소드의 반환형이 다른것은 문법적으로 오류난다. > 메소드의 자료형 구별 x
class Cal
{
public void add(int num)
{
System.out.println(num + num);
}
public double add(int num1);
//메소드 반환 자료형이 다르고, 매개변수가 같은 경우는 문법적으로 에러난다.
{
System.out.println(num1 + num2);
}
public void add(double num1, double num2)
{
System.out.println(num1 + num2);
}
}
class CalMain
{
public static void main(String[] args)
{
Cal cal = new Cal();
cal.add(5);
cal.add(5, 10);
cal.add(1.1, 2.2);
cal.add('A', 'B');
}
}
import java.util.Scanner;
class Turn{
public void ascci(int num1){
char a = (char)num1;
System.out.println(a);
//return;
}
public void ascci(String num2){
"A"
int a = Integer.parseInt(num2);
System.out.print(a);
}
}
class TurnMain{
public static void main(String[]args){
Turn tur = new Turn();
Scanner sc = new Scanner(System.in);
System.out.print("아스키 코드를 입력하세요 : ");
int num1 = sc.nextInt();
tur.ascci(num1);
sc.nextLine();
System.out.print("알파벳을 입력하세요 : " );
String num2 = sc.nextLine();
tur.ascci(num2);
}
}
아래 오류는 아스키코드를 입력받아서 알파벳 변환은 잘 되는데, 알파벳을 입력받아서 아스키 코드로 변환이 오류가 난다.

import java.util.Scanner;
class Turn{
public void ascci(int num1){
char a = (char)num1;
System.out.println(a);
}
public void ascci(String num2){
char alpha = num2.charAt(0);
int num3 = (int)alpha
System.out.print(num3);
}
}
class TurnMain{
public static void main(String[]args){
Turn tur = new Turn();
Scanner sc = new Scanner(System.in);
System.out.print("아스키 코드를 입력하세요 : ");
int num1 = sc.nextInt();
tur.ascci(num1);
sc.nextLine();//주의내용
System.out.print("알파벳을 입력하세요 : " );
String num2 = sc.nextLine();
tur.ascci(num2);
}
}
메서드 이름을 같게하여 메소드 오버로딩 해서 코드 작성해주었다
아스키코드 > 알파벳
int로 값을 입력받고, 오버로딩 메소드 위치로 넘겨준다(매개변수 자료형이 다름)
int num1을 char로 강제 형변환해준다. > 출력
알파벳 > 아스키코드
String으로 알파벳을 받고, 오버로딩 메소드 위치로 넘겨준다.(매개변수 자료형 다름)
String > int로 형변환할 때 Integer.parseInt 를 사용하는데, 이는 예외처리가 발생한다.
sc.nextLint(); 만 써놓은이유
위 nextInt();입력 받을 때 입력 후 엔터를 치는데, 이때 엔터 전값은 다른 변수에 저장되고, 버퍼에는 엔터의 값이 남아있다.
nextInt();이후 바로 nextLint();을 사용한다면, 버퍼에 남아있던 엔터 값이 입력되어 바로 종료된다.
그래서 nextInt(); 와 nextLint();사용할 때 사이에 nextLint();을 하나 둬서, 버퍼에 남아있던 엔터값을 소모시키는것이다.
'A' (65) ~ 'Z'(90)
'a' (97) ~ 'z'(122)
'0' (48) ~ '9'(89)
-char ch = 변수.charAt(원하는 리턴값의 위치) > 특정 위치의 문자 리턴(char 반환)
int a = 변수.length() > 문자열의 개수(int로 반환)
int a = 변수.indexOf("찾고싶은 문자") > 찾고싶은 문자가 몇번째 자리에 있는지 알려준다.(int 반환)
boolean b = 변수.isEmpty() > 공백인지 아닌지 확인 (boolean 반환)
-String s = 변수.trim() > 문자열에 공백이 있다면 해당 공백들을 다 제거하고 출력 (String 반환)
-String s = 변수.replace('o', 'a') > 문자열 속 o였던 문자를 a로 변환해서 출력(String 반환)
String s = 변수.toLowerCase() > 문자열을 소문자로 변환(String 반환)
String s = 변수.toUpperCase() > 문자열을 대문자로 변환(String 반환)
String s = 변수.substring(0부터 삽입한 위치 자리까지 잘라내고 리턴) > 0부터 ()안 삽입한 수까지 잘라내고 그 이후 나머지 String 반환
java.lang.Integer 클래스의 parseInt()와 valueOf()메소드 사용.
static int parseInt(String s)
파라미터로 숫자로 변환할 문자열을 입력받고, 입력받은 문자열을 integer로 변환한 int값을 리턴한다.
그러나 예외처리가 발생할 수 있으므로 주의한다.
static int calueOf(String s)
parseInt()와의 차이점
valueOf()메소드는 문자열을 변환하여 Integer Object를 리턴한다.
parseInt()메소드는 primitive type인 int를 리턴한다.
java.lang.Integer클래스의 Integer.toString()과 String.valueOf()메소드 사용