카테고리1

Chrome (1) GAME (2) HTML (3) Internet Explore (1) Movie (1) TIP (2) Windows (2) java (51) 건강 (1) 맛집 (1)

Post List

2017년 3월 10일 금요일

java] 2차원 배열을 출력하고 전체합과 평균 구하기.

// 5,5,5,5,5
// 10,10,10,10,10
// 20,20,20,20,20
// 30,30,30,30,30
// 총합, 평균

해당 모습과 같은 모양으로 출력을 하고 전체의 합과 평균을 구하기

int[][] num = {
{5,5,5,5,5},
{10,10,10,10,10},
{20,20,20,20,20},
{30,30,30,30,30}
};
int sum=0;
int j;
int count=1;

for(int i = 0; i < num.length; i++){

for (j = 0; j < num[i].length; j++){
count++;
sum += num[i][j];
System.out.print(num[i][j]);
}
System.out.println();

}
System.out.println("전체 합은 : " + sum);
System.out.println("평균은 : "+ (double)sum/count);


출력 결과

55555
1010101010
2020202020
3030303030
전체 합은 : 325
평균은 : 15.476190476190476


//먼저 2차원 배열을 만들어 값을 저장한다.
//전체 합을 구할 변수를 만든다.
//세로를 표현할 반복문 만든다.
//가로를 표현할 반복문 만든다.
//각각 출력을 하고, 5회 뒤 줄바꿈을 한다.
//편균은 소수점이 나올 수 있으므로 double형으로 형변환 해준다.

java]2차원 배열의 길이

int[][] arr = {
{5,5,5,5},
{10,10,10},
{40,40,40,40},
{2,2}
};
System.out.println("arr[3]의 길이는 : "+arr[3].length);

//10 20 30 40 50

int[] num = {10,20,30,40,50};
int sum = 0;
for(int i = 0; i<num.length; i++){
sum+=num[i];
System.out.println(+num[i]+" + sum ="+sum);
}


출력결과

arr[3]의 길이는 : 2
10 + sum =10
20 + sum =30
30 + sum =60
40 + sum =100
50 + sum =150


*Point

arr는 2차원 배열이다.
arr[][]와 같이 2차원을 표현 할 수 있지만, 앞에만 적은 arr[3]은 행을 나타내는 결과가 나온다.
배열은 0부터 시작하므로 3은 실직적으로 4번째를 나타내므로 4번째 행의 갯수인 2가 출력된다.

java] 각 배열의 수를 합산하여 출력하기

int[] Java = {85,90,75,80,100};
int[] Jsp = {60,95,80,70,65};
int[] Web = {70,80,100,95,80};
int sum, i;

for (i=0, sum=0; i<Java.length; i++){
sum += Java[i];
}

System.out.println("Java 과목의 합 :"+ sum);

for (i=0, sum=0; i<Jsp.length; i++){
sum += Jsp[i];
}

System.out.println("Jsp 과목의 합 :"+ sum);

for (i=0, sum = 0; i<Web.length; i++){
sum += Web[i];
}

System.out.println("Web 과목의 합 :"+ sum);

java]과목별 학생별 총점을 출력해보자.

int[][] score1={
{85,60,70},
{90,95,80},
{75,80,100},
{80,70,95},
{100,65,80}
};
int[] subject=new int[3]; //과목별 총점을 저장할 변수
int[] student=new int[5]; //학생별 총점을 저장할 변수
int r, c; // row(행), col(열)
System.out.println("과목별 총점 구하기");
for (c=0; c<3; c++){
for (r=0; r<5; r++){
subject[c] += score1[r][c];
}
System.out.println((c+1)+"번 과목의 총합" + subject[c]);
}
for (r=0; r<5; r++){
for (c=0; c<3; c++){
student[r] += score1[r][c];
}
System.out.println((r+1)+"번 학생의 총합 " + student[r]);
}
}
}


a,b,c : 과목
1,2,3,4,5 : 학생 이라 가정.
  a b c  
1 ㅁㅁㅁ
2 ㅁㅁㅁ
3 ㅁㅁㅁ
4 ㅁㅁㅁ
5 ㅁㅁㅁ

2017년 3월 6일 월요일

jsp] application객체 메소드

[web.xml]

  <!-- application객체 메소드를 통해 꺼내 쓸수 있게 하는 context-param 객체 -->
 
  <context-param>
  <!-- 변수 -->
  <param-name>adminEmail</param-name>
  <!-- 변수에 저장할 값 -->
  <param-value>admin@naver.com</param-value>
  </context-param>

[페이지1]
<body>
<h1>여기는 applicationTest1.jsp입니다.</h1>
<%
application.setAttribute("applicationVal", "이것은 어플리케이션변수 값을 저장한 내용입니다.");
%>
</body>

[페이지2]
<body>
<h1>여기는 applicationTest2.jsp입니다.</h1>
<%= application.getAttribute("applicationVal") %>
<p>
<%--모든 사용자가 사용하는 공통적인 데이터를 web.xml에 저장한 context-param객체의 "adminEmail)변수값 꺼내쓰기 --%>
<%=application.getInitParameter("adminEmail") %>
</body>



어플리케이션 영역 결론 :
- 웹어플리케이션이 시작될때 생성되어 웹어플리케이션이 종료될때까지 어플리케이션 영역의 데이터가 유지됨.
- 이 보관소에 데이터를 보관하면 웹어플리케이션이 실행하는 동안에 모든 서블릿이나 jsp페이지에서 사용할 수 있다.
- 하나의 웹어플리케이션을 모든 사용자가 사용하기 위한 방문자 숫자를 나타낼때..
  어플리케이션 객체에 공통적인 값을 저장한다.

jsp]session

jsp를 실행하면 session영역이 요청이 됨.

session영역에 값을 저장한 후 다른 페이지에서 출력되는지 확인.

페이지 1

<body>
<%
/*session객체 메모리 영역 내부에 sessionVal변수을 선언하여  문자열을 저장한다는 뜻 */
session.setAttribute("sessionVal", "이것은 세션변수에 문자열값을 저장한 내용입니다.");
%>
</body>

페이지 2

<body>
/*세션의 값을 불러옴*/
<%= session.getAttribute("sessionVal") %>
</body>



결론 : 클라이언트 요청시 자동으로 생성되는 jsp페이지에서의 session영역은 또다시 다른 jsp페이지를 요청시..
같은 웹브라우저가 닫히기 전까지는 세션영역의 값이 계속 유지 된다.

java]2차원 배열에 저장된 수를 표모양으로 출력하기

// int 2차원 배열 arr을 5*3으로 생성한 후 각 배열에 수를 저장하고 다음과 같은 모양으로 출력을 해보자.

10 90 70 
60 80 65 
55 60 85 
90 75 95 
60 30 80 


*****


int[][] arr = new int[5][3];

arr[0][0] = 10;
arr[0][1] = 90;
arr[0][2] = 70;
arr[1][0] = 60;
arr[1][1] = 80;
arr[1][2] = 65;
arr[2][0] = 55;
arr[2][1] = 60;
arr[2][2] = 85;
arr[3][0] = 90;
arr[3][1] = 75;
arr[3][2] = 95;
arr[4][0] = 60;
arr[4][1] = 30;
arr[4][2] = 80;

for(int row = 0; row < 5; row++){

for (int col=0; col<3; col++){

System.out.print(arr[row][col]+" ");
}

System.out.println();
}


해설 : 
첫 for문으로 행을 나타내고, 두번째 for문으로 열의 출력을 표현
위와 같이 초기화가 가능하고, 아래와 같이도 가능하다.

int[][] arr={{10, 90, 70},{60, 80, 65},{55, 60, 85},{90, 75, 95},{60, 30, 80}};

int[][] arr={
{10, 90, 70},
{60, 80, 65},
{55, 60, 85},
{90, 75, 95},
{60, 30, 80}
};

java] 2차원 배열



1차원 배열은 한줄로 되는 것을 말한다고 하면
2차원 배열은 표와 같은 형태라 보면 된다.


위의 것을 표현하면

int[][] arr= new int [3][5];  가 되며

세로로 3칸
가로로 5칸 이라는 말이다.

배열 선언시 []의 위치는 

int[][] arr = new int [3][5];
int arr[][] = new int [3][5];
int[] arr[] = new int [3][5];

의 모습으로도 가능하다.
그러나 헷갈리니 첫번째 모습으로 선언하자.

초기화는 

int[][] arr = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};

int[][] arr = {
          {1,2,3,4,5},
          {1,2,3,4,5},
          {1,2,3,4,5}
          };

위 두가지는 다른 모습이나 보기 좋게 줄바꿈을 했다는 것을 제외하고는 같은 모습이다.
그리고 아래와 같이 개별적으로도 초기화가 가능하다.

arr[0][3]=12;
arr[1][1]=100;
arr[2][3]=3;


출력할 때는

System.out.println("arr[0][3] = "+arr[0][3]);
System.out.println("arr[1][1] = "+arr[1][2]);
System.out.println("arr[2][3] = "+arr[2][3]);


위와 같이 할 수 있다.

2017년 3월 2일 목요일

java] 배열안의 값 중 큰수 구하기

문제 :

double 형 배열에 "9.5,7.0,13.6,7.5,10.0"를 저장 후
저장된 수 중에서 가장 큰 수를 구하여 출력하기.




double[] doNum = {9.5,7.0,13.6,7.5,10.0};
double max = 0;

for (int i=0; i < doNum.length; i++){
if (max <= doNum[i]){
max = doNum[i];
}
}
System.out.println(max);


double 형으로 값을 저장할 변수(배열)와
큰 수를 저장할 double 형 변수를 만든 후
저장한 수와 배열의 수를 차례로 비교하고
비교하는 배열의 수가 크면 저장한 수를 변경하고
작으면 변경하지 않는다.


 point
**저장할 변수도 double로 해주어야 정상적으로 저장이 된다.
**max에 저장된 변수와 doNum의 변수를 비교하여 max에 저장한다.



-*-*-*-


max = doNum[0];  //기준을 doNum[0]을 기준으로 잡음
for (int i=0; i<5; i++){ // 기준과 같은 0부터 시작할 경우 오류가 생길 수가 있음. 1부터 하는 것이 좋다.
 if(doNum[i]>max){
  max=doNum[i];
 }
}

java]회문수 구하기...

회문수란....?

대칭수 또는 회문수라 부르며,
순서대로 읽은 수와 거꾸로 읽은 수가 일치하는 수를 말한다.
예를 들어 123321은 회문수이고, 123421은 회문수가 아니다.



int val = 1233321;
int tmp = val;

int re = 0;  // 뒤집어서 저장
int num1 = 0, num2=0;

while(tmp != 0){
System.out.println("num1 = re * 10 : "+ num1);
System.out.println("num2 = tmp % 10 : "+ num2);
System.out.println("re = num1+num2 : " + re);
System.out.println("tmp /= 10 : " + tmp);

System.out.println();
num1 = re * 10;  //re의 자리수를 올려서 num1에 저장
num2 = tmp % 10; //tmp/10 의 나머지를 저장... 뒤에서부터 하나씩 빼서 저장됨

re = num1+num2; //re의 자리수 올린 수인 num1에 뒤에서 뺀 수를 더한 후 저장

tmp /= 10; // 끝수를 num2에 저장했으므로 끝수 지우고 재저장
}


if (val == re){
System.out.println(val+"은 회문수입니다.");
}else{
System.out.println(val+"은 회문수가 아닙니다.");
}


*-*-*-

처음
num1 = re * 10 : 0
num2 = tmp % 10 : 0
re = num1+num2 : 0
tmp /= 10 : 1233321

1회전 후
num1 = re * 10 : 0
num2 = tmp % 10 : 1
re = num1+num2 : 1
tmp /= 10 : 123332

2회전 후
num1 = re * 10 : 10
num2 = tmp % 10 : 2
re = num1+num2 : 12
tmp /= 10 : 12333

3회전 후
num1 = re * 10 : 120
num2 = tmp % 10 : 3
re = num1+num2 : 123
tmp /= 10 : 1233

4회전 후
num1 = re * 10 : 1230
num2 = tmp % 10 : 3
re = num1+num2 : 1233
tmp /= 10 : 123

5회전 후
num1 = re * 10 : 12330
num2 = tmp % 10 : 3
re = num1+num2 : 12333
tmp /= 10 : 12

6회전 후
num1 = re * 10 : 123330
num2 = tmp % 10 : 2
re = num1+num2 : 123332
tmp /= 10 : 1


1233321은 회문수입니다.



이해하기 난해한 문제이다. 여러번 보자...

java] 배열



배열이란 같은 이름의 변수에 여러칸을 만든다고 생각하면 된다.
다음은 기본적인 형태이다.


int[] number = {1,2};


위의 경우
number라는 이름의 변수에 1번칸에 1, 2번칸에 2를 저장한다는 말
사용할 때는
number[0]
number[1]
의 형태로 1번 2번을 불러올 수 있다.



int[] number1 = new int[5];


위의 경우
number1라는 이름의 변수에  new 연산자를 이용하여, 총 5칸을 만든다는 말이다.
즉,
number1[0]
number1[1]
number1[2]
number1[3]
number1[4]
로 불러 올 수 있으며
기본적으로 int형으로 선언할 경우
기본값이 0으로 초기화가 되어 있다.



int[] arr = new int[5];


arr[0]=10;
arr[1]=1;
arr[2]=4;
arr[3]=33;
arr[4]=11111;


위의 내용과 같이
총 5개의 arr배열을 만들고,
각 배열에 값을 초기화를 해주는 부분이다.

System.out.println("arr[0] : " + arr[0]);
System.out.println("arr[1] : " + arr[1]);
System.out.println("arr[2] : " + arr[2]);
System.out.println("arr[3] : " + arr[3]);
System.out.println("arr[4] : " + arr[4]);

위와 같이 출력이 가능하다.

출력결과
arr[0] : 10
arr[1] : 1
arr[2] : 4
arr[3] : 33
arr[4] : 11111


그리고 반복문으로도 출력이 가능하다.

for (int i=0; i<arr.length; i++){
System.out.println("arr["+i+"] : " + arr[i]);
}

출력결과 동일



int[] arr={1,2,3,4,5};

위와 같이 처음부터 5개의 값을 초기화할 수 있다.


예제문제)

score 배열에 70, 80, 90, 60, 100 을 넣고 총 합과 평균을 구하시오.


int[] score = {70, 80, 90, 60, 100};
int sum=0;

for (int i = 0; i<5; i++){
  sum+=score[i];
}

System.out.println("총 합은 : " + sum);
System.out.println("평균은 : " + sum/5);


출력결과
총 합은 : 400
평균은 : 80

java] scanner 를 이용하여 숫자 맞추기

//random

int value = (int)(Math.random()*6)+1;

System.out.println("random 값 : " + value);


// 0.0 *6 <= math.random()*6 < 1.0 *6
// 0.0 <= math.random()*6 < 6.0
// (int) 0.0 <= (int)math.random()*6 < (int)6.0
// 0+1 <= (int)(math.random()*6)+1 < 6+1
// 1 <= (int)(math.random()*6)+1 < 7
// 1 2 3 4 5 6

Math.random() 은 기본으로 0.00000~0.99999까지 출력
Math.random() 뒤에 *숫자를 넣으면 숫자만큼 정수 값이 추가된다.
가령 *6을 하면 총 6개의 숫자를 출력 0.00000~5.99999까지 출력됨.
앞에 int를 명시하면 뒤의 소수점은 버림되어짐.
(int)Math.random()*6 을 하면 결과는 0....
(int)(Math.random()*6) 을 하면 결과는 0~5까지 출력됨.(적용범위의 문제)
(int)(math.random()*6)+1를 하면 1~6 사이의 숫자가 랜덤으로 출력됨.



// 스케너를 이용하여 computer가 뽑은 랜덤 숫자를 맞추기

//1~100까지 랜덤 숫자를 computer가 뽑는다.
//그것을 scanner를 이용하여 숫자를 입력 받는다.
//입력 받은 숫자가 랜덤으로 뽑은 숫자와 비교하여 정답 유무를 판단한다.
//입력 받은 숫자가 크면 크다고 출력
//입력 받은 숫자가 작으면 작다고 출력
//정답을 입력하면 정답과 도전한 횟수를 출력한다.





int random1 = (int)(Math.random()*100)+1;
Scanner s = new Scanner(System.in);
System.out.println("computer : "+ random1);
int count;


for(count=1; ; count++){
System.out.print("computer의 숫자를 맞추시오 : ");
int input = s.nextInt();
if(random1 != input){
if(random1 > input){
System.out.println("입력한 수보다 작습니다.");
}else if(random1 < input){
System.out.println("입력한 수보다 큽니다.");
}
}else{
System.out.println("정답은"+random1+"입니다. 당신은 "+count+"번째에 맞추셨습니다.");
break;
}
}



*-*-*- 위의 내용에서 break문 제거



int random1 = (int)(Math.random()*100)+1;
Scanner s = new Scanner(System.in);
System.out.println("computer : "+ random1);
int count;
int input=0;


for(count=1; random1!=input ; count++){
System.out.print("computer의 숫자를 맞추시오 : ");
input = s.nextInt();
if(random1 != input){
if(random1 > input){
System.out.println("입력한 수보다 작습니다.");
}else if(random1 < input){
System.out.println("입력한 수보다 큽니다.");
}
}
}

System.out.println("정답은"+random1+"입니다. 당신은 "+count+"번째에 맞추셨습니다.");


*-*-*- do while문으로...


int answer = (int)(Math.random() *100)+1;
Scanner s = new Scanner(System.in);
int count = 0;
int input;

do{
count++;
System.out.println("1~100 사이의 값을 입력하세요:");
input = s.nextInt();  // 값 입력
if(answer > input){
System.out.println(" 입력한 수보다 큽니다. ");
} else if (answer < input){
System.out.println(" 입력한 수보다 작습니다.");
} else {
System.out.println("정답입니다!!!");
System.out.println("도전 횟수는 :" + count);
break;
}
} while (true);

java] 문자열 12345의 개별합을 구하시오.

// "12345" -> 1+2+3+4+5 => 15
// charAt()  아스키코드
// 변수.length() 반복문의 길이

String num = "12345";
char chh = ' ';
int sum00 = 0;
System.out.println("num의 갯수는 :"+num.length());
for (int ii=0; ii < num.length(); ii++){
chh = num.charAt(ii);
// sum00 += chh - 48;
sum00 += chh - '0';
System.out.println(sum00);

}
System.out.println("\"12345\"의 개별 합은?" + sum00);


**************************


int number = 12345;
int sum2 =0;
// 1+2+3+4+5 = ?
// 12345 5
// 1234 4
// 123  3
// 12   2
// 1    1

while(number>0){
sum2 += number%10;
number /=10;
// 12345 / 10 => 1234.5 >> 1234
// 1234  / 10 => 123.4  >> 123
// 123   / 10 => 12.3 >> 12
// 12    / 10 => 1.2 >> 1
}
System.out.println("12345의 개별 합은?" + sum2);

java] 함수

 String s = new String("Hello Java");

 int size = s.length(); // 문자열 길이 구하기
 System.out.println("문자열 갯수 : " + size);

 char c = s.charAt(6); // s객체의 문자열 중의 6번째 인덱스 값 반환
 System.out.println("3번째 문자 : " + c);

 int cmp = s.compareTo("Hello Java"); //문자열 비교
 System.out.println("문자열 비교 :" + cmp);

 String conS = s.concat("!!!"); //기본 문자열의 다른 문자열을 추가
 System.out.println("추가문자열 : " + conS);

 String subs = s.substring(3, 5); //문자열에서 부분만 출력 (3~5번째)
 System.out.println("부분 문자열 : " + subs);

 String subs1 = s.substring(3); //문자열에서 부분만 출력 (3번째 이후 쭉)
 System.out.println("부분 문자열 : " + subs1);

 String toup = s.toUpperCase();
 System.out.println("소문자에서 대문자로 변경 : " + toup);

 String tolow = toup.toLowerCase();
 System.out.println("대문자에서 소문자로 변경 : " + tolow);




출력결과

문자열 갯수 : 10
3번째 문자 : J
문자열 비교 :0
추가문자열 : Hello Java!!!
부분 문자열 : lo
부분 문자열 : lo Java
소문자에서 대문자로 변경 : HELLO JAVA
대문자에서 소문자로 변경 : hello java

java]피보나치 수열

//



피보나치 수열
// 1,1,2,3,5,8,13,...
// 1항-1 2항 -1 (고정)
// 3항 = 1항+2항 4항 = 2항+3항 ...
// 2        1     1    3      1     2
// 5항 = 3항+4항 6항 = 4항+5항
// 5       2     3     8      3     5
// 7항 = 5항+6항 8항 = 6항+7항
// 13      5     8    21     8     13
// 9항 = 7항+8항 10항 = 8항+9항
// 34     13    21   55      21    34
// 1,1,2,....
// 10번째 수는 얼마인지 찾아보기

  int num1 = 1;
int num2 = 1;
int num3 = 0;
int sum = 2;
System.out.println("1번 1");
System.out.println("2번 1");
for (int i1 = 3; i1 <= 10; i1++){
num3 = num1 + num2;
num1 = num2;
num2 = num3;
sum += num3;
System.out.println(i1+"번 "+ num3);
}
System.out.println(sum);
출력결과
 피보나치 수열
1번 1
2번 1
3번 2
4번 3
5번 5
6번 8
7번 13
8번 21
9번 34
10번 55
143

1번째와 2번째는 1, 1로 초기값을 넣어주고, 합산에 2를 넣음으로써 1번째와 2번째까지 계산했다고 가정하에 3번부터 진행되도록 한다.