java 100예제 #9
배열의 빈도
(선거, 의견 투표 등)
ar[ target [ i ] ] ++ ;
public static void main(String[] args) {
int[] target = {1,3,3,2,1,1,3,0,1,2};
//숫자 종류가 4개임. > 그만큼 방 ar
int[] ar = new int[4];
//int 배열 선언하면 자동으로 0으로 초기화
for(int i =0;i<target.length;i++ ) {
ar[target[i]] ++;
//target배열내 숫자가 ar의 인덱스와 동일하면 ar배열 요소값을 1씩 증가
}
for(int i : ar)System.out.println(i);
}
짝수만 while, continue를 사용하여 구현하기(1~30)
public static void main(String[] args) {
int number = 1;
while(number<=30) {
if(number%2!= 0){
number++;
continue;
}
System.out.print(number + " ");
number++;
}
}
짝수만 중첩 반복문을 사용하여 구현하기(1~30)
public static void main(String[] args) {
for(int i = 0; i<=2; i++) {
for(int j = 0 ; j<=9 ;j++) {
int out = i*10 + j;
if(out %2 !=0) continue;
System.out.print(out + " ");
}
System.out.println();
}
}
continue label : label이 선언된 곳으로 이동한다.
public static void main(String[] args) {
//label
outerloop:
for(int i = 0 ; i<=3 ; i++) {
for(int j = 0 ; j<=9 ; i++) {
int out = i*10 + j;
if(out %2 !=0) {
if(j==1) {
System.out.println();
continue outerloop;
}
}
System.out.print(out + " ");
}
}
}
2차원 배열로 5X5 출력하기
int r= 5, c= 5;
//행과 열
char[][] ar = new char[][] {
{'@', '@', '@','@','@'},
{'@', '@', '@','@','@'},
{'@', '@', 'A','@','@'},
{'@', '@', '@','@','@'},
{'@', '@', '@','@','@'}
};
for(int i = 0 ; i< r ; i++) {
for(int j = 0 ; j <c; j++) {
System.out.print(ar[i][j]+" ");
}
System.out.println();
}
배열의 빈도수, 반복문을 이용한 최대, 과반수 구하기
Solution를 이용한 구현
class Solution{
int max = 0;
public void sMethod(int[] n, int[] num){
for(int i = 0 ; i< num.length ; i++) {
n[num[i]-1] ++;
}
for(int i = 0 ; i < n.length ; i++) {
int g = i+1;
if(n[i] >= n [max])
max = i;
System.out.println(g+"번 후보 --> "+ n[i] +"표");
}
System.out.println("가장 많은 득표 수 --> "+ n[max]+"표 이고, 후보자는 "+(max+1)+"번 후보자 입니다.");
//과반수 체크 _ 실수 필요!
if(n[max] >= (num.length)/ ( double ) 2 )
System.out.println("당선 ! ");
else
System.out.println("과반수 실패! 미당선");
}
}
public class ex5 {
public static void main(String[] args) {
Solution s = new Solution();
int[] n = new int[3]; //ar
int[] num = {1,1,2,2,3,3,3,3,2,3}; //vote_box
s.sMethod(n,num);
}
}
반복문없이 배열의 최대, 최소
import java.util.Arrays;
public class ex5 {
public static void main(String[] args) {
int[] vote_box = {1,2,3,33,12,5};
Arrays.sort(vote_box);
System.out.println("최대 : "+vote_box[vote_box.length-1]);
System.out.println("최소 : "+vote_box[0]);
System.out.println("내림차순의 배열 모두 출력 : "+Arrays.toString(vote_box));
}
}
Object
(제네릭(Generic)의 필요성)
메소드에 어떤 타입의 필드가 와도 사용하려면 Object을 이용한다.
편하지만 단점 ..
1. return 하여 사용할때 형변환이 필요할지도?
객체명.getClass( ).getName( )
객체가 속하는 클래스의 정보 출력
class Sample{
//필드
private Object a;
//생성자
Sample(Object x){this.a= x; }
//메소드
public Object getA(){return a;}
void printInfo() {
System.out.println(a.getClass().getName());
}
}
public class ex5 {
public static void main(String[] args) {
Sample s1 = new Sample("안녕?");
System.out.println(s1.getA());
Sample s2 = new Sample(100);
System.out.println(s2.getA());
Sample s3 = new Sample(new Object());
s1.printInfo(); //String
s2.printInfo(); //int
s3.printInfo(); //Object
String str =(String) s1.getA();
//형변환 귀찮을걸?
}
}
2. 컴파일은 해도 실행 단계에서 ClassCast 오류 발생할지도?
들어있는 값이랑 다른 엉뚱한 타입으로 선언+형변환 했다면
--> 컴파일(javac)에서는 에러가 안 나오고 실행(java)단계에서 오류.
class Person{
public Object obj;
Person(Object obj){this.obj = obj;}
//만약 Object대신 Student이여도 가능하다.
}
class Student{
public int grade;
Student(int grade){this.grade = grade;}
}
public class ex5 {
public static void main(String[] args) {
Person p1= new Person("안녕");
System.out.println(p1.obj);
// int a = (int)p1.obj; ==> ClassCast 오류
}
}
이런 단점을 해결하기 위해서 새로운 문법 "제너릭"을 사용한다.
Author And Source
이 문제에 관하여(java 100예제 #9), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@daegari/java-8-v80t7g9z저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)