class OuterClass {
int x = 10;
class InnerClass{
int y = 5;
public int myInnerMethod() {
// 내부 클래스에서 외부 벨류값에 접근
return x;
}
}
}
class Main {
public static void main(String[] args){
OuterClass myOuter = new OuterClass();
//내부 클래스에 접근할수 있는 생성자 형식
OuterClass.InnerClass myInner = myOuter.new InnerClass();
//내부필드 접근
System.out.println(myInner.y + myOuter.x);
//내부 매소드 접근
System.out.println(myInner.myInnerMethod());
}
}
class Outer{
static class Inner{
int iv = 200;
}
}
public class Exercise7_7 {
public static void main(String[] args){
// Outer o = new Outer();
// Outer.Inner i = o.new Inner();
// 내부 스태틱 클래스는 외부클래스를 먼저 생성하지 않아도 된다
// 내부클래스가 외부클래스의 맴버와 같이 간주됨
Outer.Inner i = new Outer.Inner();
System.out.println(i.iv);
//iv가 static 일경우 접근방법
System.out.println(Outer.Inner.iv);
}
}
내부클래스와 외부 클래스의 변수명이 같을때
class Outer{
int value = 10;
class Inner{
int value = 20;
void method1(){
int value = 30;
System.out.println(value);
System.out.println(this.value);
System.out.println(Outer.this.value);
}
}
}
public class Exercise7_8 {
public static void main(String[] args){
Outer o = new Outer();
Outer.Inner i = o.new Inner();
i.method1();
}
}
import java.util.Scanner;
public class userName {
public static void main(String[] args){
Scanner myObj = new Scanner(System.in);
System.out.println("Enter UserName");
String userName = myObj.nextLine();
System.out.println("UserName is " + userName);
Scanner myObj2 = new Scanner(System.in);
System.out.println("Enter name, age, and salary: ");
String name = myObj2.nextLine();
int age = myObj2.nextInt();
double salary = myObj2.nextDouble();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Salary: " + salary);
}
}
class tryEx {
public static void main (String[] args) {
// try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[4]);
// }catch (Exception e){
// System.out.println("something went wrong...");
// }
System.out.println("next step");
}
}
import java.util.Scanner;
class Exercise8_7 {
public static void main(String[] args) {
int answer = (int) (Math.random() * 10) + 1;
int input = 0;
int count = 0;
do {
count++;
System.out.println("1과 10사이의 값을 입력하세요");
try{
// Scanner myObj = new Scanner(System.in);
// input = myObj.nextInt();
// 한줄로
input = new Scanner(System.in).nextInt();
}catch (Exception e){
System.out.println("유효하지 않은 값입니다");
continue;
}
if (answer > input) {
System.out.println("더큰수를 입력하세요");
} else if (answer < input) {
System.out.println("더 작은수를 입력하세요");
} else {
System.out.println("맞췄습니다");
System.out.println("시도 횟수는 " + count + "번입니다");
break;
}
}while(true);
}
}

인데스값이 있어 무작위 접근이 가능함
ArrayList 저장 순서가 유지 되고, 중복을 허용함
HashSet 거의 비슷함
ArrayList<자료형> 배열명= new ArrayList<생략가능>(); = 배열의 생성
HashSet<자료형> 배열명= new HashSet<생략가능>(); = 배열의 생성
자료형 = String, Integer
cars.add("Volvo"); = 객체 삽입
System.out.println(배열명); = 배열 전체출력
System.out.println(배열명.size()); = 배열 길이(length) 출력
배열명.set(0,"Opel") = 객체 수정
System.out.println(배열명.get(0)); = 객체 보이기
배열명.remove(0); = 객체 지우기
배열명.clear(); = 배열 비우기
Collections.sort(배열명); = 오름차순으로 정렬하기
System.out.println(cars.contains("Mazda")); = 객체 존재여부 확인
//for each 문
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
for(int i : list) {
System.out.println(i);
} //같은 동작
LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다고 보면 된다.
ArrayList와 같이 데이터의 추가, 삭제시 불필요한 데이터의 복사가 없어 데이터의 추가, 삭제시에 유리한 반면 데이터의 검색시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리하다. 소스 코드를 통해 조금 구체적으로 살펴보자.
LinkedList는 내부적으로 양방향의 연결 리스트로 구성되어 있어 참조하려는 원소에 따라 처음부터 정방향 또는 역순으로 순회 가능(배열의 단점을 보완하기 위해 LinkedList가 고안되었다.)
LinkedList<자료형> 배열명= new LinkedList<생략가능>(); = LikedList 생성
cars.add("Volvo"); = 객체삽입
System.out.println(배열명); = 배열 출력
배열명.addFirst("Mazda"); = 배열 첫번쨰에 객체 입력
배열명.addLast("Mazda"); = 배열 마지막에 객체 입력
배열명.removeFirst(); = 첫번째 객체 지우기
배열명.removeLast(); = 마지막 객체 지우기
System.out.println(배열명.getFirst()); = 첫번쨰 객체 가져오기
System.out.println(배열명.getLast()); = 마지막 객체 가져오기
키값(중복불가능) + 값(중복허용)
HashMap<자료형, 자료형> 배열명 = new HashMap<생략가능>();
배열명.put("Norway", "Oslo"); = 객체 삽입
System.out.println(배열명); = {key=value} 출력
System.out.println(배열명.get(key)); = 대응되는 Value 가져오기
배열명.remove(key); = Key와 Value 지우기
System.out.println(배열명.size()); = 배열 크기 가져오기
for (String i : capitalCities.keySet()){
System.out.println(i);
} //key값 전부 가져오기
for(String i : capitalCities.values()){
System.out.println(i);
} //value 전부 가오기
for(String i : capitalCities.keySet()) {
System.out.println("key : " + i
+ " value : " + capitalCities.get(i));
}