8/17 [자료구조]-배열 [java] -매소드
<자료구조>
package 배열;
public class Ex01배열생성 {
public static void main(String[] args) {
//1. 정수형 데이터를 저장할 수 있는 베열의 참조값을 저장하는 변수 선언
int[] arr;
int arr2[];
//2. arr 변수에 크기가 10인 배열의 참조값 할당
arr = new int[10];
//3. 각각 인덱스에 값을 저장
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//정수형 배열이 생성되었을 때 기본값? 0
//3-1. 배열 생성 할 때 저장되어야 하는 값을 알고 있을때
int[]arr3 = {5,3,2,1,8,9,10};
//4. arr3 배열에 저장된 모든 데이터를 출력
System.out.println(arr3[0]);
System.out.println(arr3[1]);
System.out.println(arr3[2]);
System.out.println(arr3[3]);
System.out.println(arr3[4]);
// i<arr3.length
for(int i=0 ;i<=arr3.length-1 ;i++) {
System.out.println(arr3[i]);
}
//5. 배열에 저장된 모든 값의 합
int sum = 0; //누적합 저장할 변수
for(int i=0;i<arr3.length; i++) {
//sum에 배열값 누적하는 방법
sum+=arr3[i]; //sum=sum+arr3[i]
}
System.out.println("합"+ sum);
}
}
package 배열;
import java.util.Random;
import java.util.Scanner;
public class Ex02 {
public static void main(String[] args) {
//random 도구(객체, 인스턴스)
Random rd = new Random();
rd.nextInt(20)+1;
// 1. 크기가 10인 1차원 정수형 배열을 선언한 후 원하는 값으로 초기화하시오.
int[]arr = new int[10]; // 배열생성 -> 값 따로 초기화 x(0)
arr[0] =5;
arr[1] =2;
arr[2] =3;
arr[3] =2;
arr[4] =1;
arr[5] =4;
arr[6] =6;
arr[7] =3;
arr[8] =12;
arr[9] =10;
int[]arr2= {2,4,6,7,8,2,6,8,4}; // ->크기가 10인 배열을 생성
Scanner sc = new Scanner(System.in);
for(int i =0; i<arr.length; i++) {
arr[i] = rd.nextInt(20)+i;
arr[i] = sc.nextInt();
}
int cnt =0;
System.out.print("배열 홀수 : ");
for(int i=0; i<arr.length-1; i++) {
if(arr[i]%2==1) {
cnt++;
System.out.print(arr[i]);
}
}
System.out.println("홀수 개수: "+cnt);
//int[]arr2;
//arr2= {2,4,6,7,4,8,2,6,8,4}; //->크기가 10인 배열을 생성
// ->이렇게 쓰는거 불가능! 무조건 배열 생성 후 바로 변수까지 선언
// 2.배열의 값 중 홀수 만 출력하고 몇 개인지 출력하시오.
// int arr[]= {5,6,13,27,34,35,78,2,3,1,};
// 배열 홀수 : 5,13,27,35,3,1
// 총 개수:6개
//배열을 랜덤값으로 초기화 하도록 수정하시오.
}
}
}
package 배열;
import java.util.Random;
import java.util.Scanner;
public class Ex03 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
Random rd = new Random();
//랜덤 배열 생성
int[]arr=new int [10];
for(int i =0;i<arr.length;i++) {
arr[i]=rd.nextInt(20)+1;
System.out.print(arr[i]+" ");
}
//최대값
int max = arr[0];
//최소값
int min = arr[0];
//최대값 구하는 반복문
for(int i=0; i<arr.length; i++) {
if(arr[i]>max) {
max=arr[i];
}
}
System.out.println("가장 큰 값 : "+ max);
//최솟값 구하는 반복문
for(int i=0; i<arr.length; i++) {
if(arr[i]<min) {
min = arr[i];
System.out.println("가장 작은 값 : "+min);
}
}
}
}
package 배열;
import java.util.Scanner;
public class Ex04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1. 크기가 5인 정수형 배열을 생성하시오.
int[] arr = new int[5];
// 2. 정수형 배열에 5개의 점수를 입력하여 저장한 후 모두 출력하시오.
for(int i =0;i<arr.length;i++) {
System.out.print(i+1 + "번째 입력 >> ");
arr[i]= sc.nextInt();
}
System.out.print("입력된 점수 : " );
for(int j =0; j<arr.length;j++) {
System.out.print(arr[j]+ " ");
}
int max = arr[0];
int min = arr[0];
int sum = 0;
for(int i=0; i<arr.length; i++) {
if(arr[i]>max) {
max=arr[i];
}
}
System.out.println("최고 점수 : "+ max);
for(int i=0; i<arr.length; i++) {
if(arr[i]<min) {
min = arr[i];
}
}
System.out.println("최소 점수 : "+min);
System.out.println("총 합 : "+sum);
System.out.println("평균 : "+sum/5.0);
}
}
package 배열;
import java.util.Scanner;
public class ex05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//문자열 배열 생성, 레퍼런스 변수 선언
String[] arrStr = new String[5];
arrStr[0] = "박진형";
arrStr[1] = "김설아";
arrStr[2] = "임다인";
arrStr[3] = "문재승";
arrStr[4] = "김지연";
System.out.print("검색할 이름 입력 >> ");
String name = sc.next();
for(int i=0;i<arrStr.length;i++) {
if(name.equals(arrStr[i])) {
System.out.println(name+"님은 "+i+ "번째 인덱스에 저장되어 있습니다");
break;//이름이 안겹칠때만 사용 , 도아성 반복을 진행하지 않아도 될때 잘 활용을 해야 한다.
}
}
}
}
<java>
[메소드(Method)]
입력값 ex)2 -> 알고리즘ex)2x + 1 -> 결과값 ex)5
- 객체의 행위를 표현
- 반복적으로 사용되는 코드 최소화
- 어떤 작업을 수행하기 위한 명령문의 집합
[메소드(Method)의 기본구조]
public int addNumber(int num1 , int num2) {
int result = num1+num2;
return result;
}
접근제한자 리턴타입 메소드이름(매개변수) {
실행문장1
실행문장2
return(반환 값)
}
public class ex01 {
public static void main(String[] args) {
// 더하기 기능을 가질수 있는 메소드 생성하기
// 메소드()의 기본구조
// 1. 접근제한자 : public -> 내부/외부 어디서든 사용가능!
// 2. 리턴타입 : 메소드의 결과값이 어떤 형태로 나오는지 지정!
// + 리턴의 타입이 없는 경우 'void'사용
// 3. 메소드 이름 : 메소드의 기능을 사용하기 위해서는 이름을 호출! 해줘야 한다
// 4. 매개변수 : 일련의 알고리즘을 처리하기 위한 재료값! -> x값
// + return 키워드! : 메소드의 결과에 따라 도출 되어야 하는 결과값! - > y값
// 메소드 호출
int result = sum(2,3);
System.out.println("결과값: "+ result);
}
// 메소드를 지정할 수 있는 영역
// -> main() 영역을 벗어나고 아직 class의 영역 포함 될 때!
public static int sum(int num1, int num2) {
int result = num1 + num2;
return result;
}
}
리턴타입: 어떤 형태의 결과값으로 출력할건지 미리 지정한다 ex)정수형 int , 실수형 double 정하기
매개변수: x, 메소드안에서만 사용한다
return:실제나온 결과 값
리턴타입은 반환값과 같은 값으로 받아야 한다
[메소드의 기본구조- 리턴타입]
- 메소드의 수행결과를 어떤 타입(자료형)으로 반환할 것인지 알려주는 것
- 아무것도 반환하지 않을 경우 리턴 타입대신 void를 사용한다.
- 메소드가 결과값을 반환하는 경우 반드시 return문을 사용하여 메소드의 리턴타입에 맞는 결과값을 지정해야 한다.
1. 반환값이 없을 경우(void)
public void prinResult(){
}
2. 반환값이 있는 경우
public int minus(){
}
->
public int minus(){
return 0;
}
[메소드의 종류]
매개변수o , 반환값 x -> 가장 많이 쓰임
매개변수 o, 반환값 o -> 가장 많이 쓰임
매개변수 x, 반환값 o
매개변수 x, 반환값 x -> 드물게 쓰임
[메소드- 매개변수 o, 반환값 x]
public class Test{
public static void main(String[] args){
addNumber(10,15);
}
public static void addNumber(int num1, int num2) {
int result = num1 + num2;
System.out.println("연산결과 : "+result);
}
}
->
console
연산결과 : 25
[메소드- 매개변수 o, 반환값 o]
public class Test{
public static void main(String[] args) {
int value = addNumner(8,12);
System.out.println("연산결과 : "+value);
}
public static int addNumber(int num1, int num2){
int result = num1 + num2;
return result;
}
}
->
console
연산결과 : 20
[메소드- 매개변수 x, 반환값 o]
public class Test{
public static void main(String[] args){
System.out.println(toDay());
}
public static String toDay(){
String today = "4월5일";
return today;
}
}
->
consolle
4월 5일
[메소드- 매개변수 x, 반환값 x]
public class Test{
public static void main(String[]args){
print();
}
public static void print(){
System.out.println("프로그램이 종료되었습니다.");
}
}
public class Ex02 {
public static void main(String[] args) {
add(3,5);
sub(3,5);
mul(3,5);
div(3,5);
}
//매소드 연산에 대한 결과값은 메소드 내에서 출력할 수 있도록 하시오
// add(int num1, int num2)
public static void add(int num1,int num2) {
int add = num1 + num2;
System.out.println("add값: "+ add);
}
//sub(int num1, int num2)
public static void sub(int num1,int num2) {
// 큰 수에서 작은수를 뺄수 있도록 수정!
int sub = num1>num2? num1-num2 : num2- num1;
System.out.println("sub값: "+ sub);
}
//mul(int num1, int num2)
public static void mul(int num1,int num2) {
int mul = num1 * num2;
System.out.println("mul값: "+ mul);
}
//div(int num1, int num2)
public static void div(int num1,int num2) {
int div = num1 /num2;
System.out.println("div값: "+ div);
}
}
import java.util.Scanner;
public class Ex03 {
public static void main(String[] args) {
// 정수형 변수 num1 과 num2를 각각 초기화 하고
// 문자형 변수 op를 선언해 원하는 연산자로 초기화 하세요.
// num1, num2, op를 받아 num1과 num2를 op애 맞게 연산한 최종 값을 반환해주는 cal 메소드를 작성하세요
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 정수 : ");
int num1 = sc.nextInt();
System.out.println("두번째 정수 : ");
int num2 = sc.nextInt();
System.out.println("연산자 입력(+,-,*,/) : ");
String op = sc.next();
System.out.println("결과값: " + cal(num1,num2,op));
}
public static int cal(int a, int b, String op) {
int result = 0;
if(op.equals("+")) {
result = a+b;
}else if(op.equals("-")) {
result = a>b? a-b: b-a;
}else if(op.equals("*")) {
result = a*b;
}else {
result = a/b;
}
return result;
}
}
public class Ex04 {
public static void main(String[] args) {
int base = 2;
int n =3;
int result = powerN(base, n);
System.out.println("결과 확인 : "+ result);
}
public static int powerN(int base , int n) {
int sum = 1;
for(int i = 1; i<=n ; i++) {
sum *= base;
} return sum;
return (int)Math.pow(base, n);
}
}
int num1 = 11;
int num2 = 9;
int result = close10(num1, num2);
System.out.println("10에 가까운 수 : " + result);
}
public static int close10(int num1, int num2) {
int a = 0;
int b = 0;// num1과 10의 차이값
int c = 0;// num2와 10의 차이값
if(num1>=10) {
b = num1-10;
}else {
b = 10-num1;
}
if(num2>=10) {
c= num2-10;
}else {
c= 10-num2;
}
if(b<c) {
a=num1;
}else if(c<b){
a=num2;
}else if(b==c) {
a=0;
}
return a;
}