이안의 평일코딩

JAVA의 정석 15일차 - 변수, 연산자, 제어문, 배열, 문자열 복습 본문

Back-end/Java

JAVA의 정석 15일차 - 변수, 연산자, 제어문, 배열, 문자열 복습

이안92 2020. 7. 3. 11:52
반응형

2020.07.03(금)

 

1. 변수 정리

변수 : 필요 -> 변경해서 사용할 수 있는 메모리 저장공간

상수 : 변경할 수 없는 값

 

 1) 변수의 종류

  (1) 한개의 데이터 공간 -> 변수

  (2) 같은 타입 여러개를 저장하는 공간 -> 배열 (연속적으로 메모리에 저장 => 인덱스)

  (3) 다른 타입 여러개를 저장하는 공간 -> 클래스 

       - 변수로만 사용하는 방법 (사용자 정의 데이터형) : 데이터형 클래스

       - 기능만 설정 => 액션클래스

   *** 변수 => 메모리에 저장 => 프로그램이 종료하면 자동으로 메모리에서 사라진다

 

  2) 변수를 사용

  ========

      메모리에 저장 => 메모리 크기, 사용범위 -> {}안에서만 사용

      public class A {

       변수 => 클래스 전체에서 사용 (전역변수) => 조립

        public static void main(String[] args) {

          ==== 지역변수

          변수 => main안에서 사용

           if(조건문) {

              변수 => if에서만 사용

           }

         }

       }

 

  3) 변수의 용도

  ======== 프로그램(변형되는 데이터)

 

  4) 변수명을 만드는 방법 => 메모리는 주소 형식 (0~~메모리 크기)

      => 4byte로 분할 => 정수한개를 저장하는 공간 => int

      => 주소 => 저장된 위치를 확인할 수 없다 => 별칭 (변수) 부여 => 저장된 데이터 찾기

      &a ==> (X)

      => 식별자

 

  5) 변수 => 기본형 (자바에서 제공하는 메모리 크기)

          => 정수 저장 (int=>일반 프로그램, long=>빅데이터)

          => 실수 저장 (double)

          => true/false => boolean => 존재여부 확인 (while안에서 종료)

          => 문자를 여러개 저장 ==> String

  

  6) 변수선언

      데이터형 변수명;

 

      정수 선언

       int a;

       long a;

 

      문자열 선언

       String s;

 

      논리 선언

       boolean b;

 

      실수 선언

       double a;

 

  7) 변수 초기화

     변수명=값

      ==> int a = 10; long a = 10(10L)

             double d = 10.5 (10, 'A', 10.5F)

             boolean b = true / false

             String s = "Hello Java..."

 

  10개의 데이터 (정수) => 배열

int[] com = new int [10]; // 숫자를 저장 1~10 => 중복(임의로 추출)
// 10개 데이터에 초기값 주입
for (int i = 0; i < 10; i++) {
	com[i]=(int)(Math.random()*10)+1;
    }
// 확인 => 출력
for (int i : com) {
	System.out.print(i+" ");
    }

  두개의 정수 => 일반 int

  문자를 여러개 저장 => char[], String

  true/false => boolean

int su = 0; // 난수값 저장
// 중복이 없으면 => 저장(false), 중복이 되면(true) 난수를 다시 발생
boolean bCheck = false;
int[] com = new int[10];
// 경우의 수
// 로그인 => 3개 => String, int, char
// ID, PWD, LOGIN
for (int i=0; i<10; i++) {
	// 중복여부 확인, 중복이 되면 ==> 다시 난수 발생
    bCheck=true;
    while(bCheck) {
    	// 난수
        su = (int)(Math.random()*10)+1;
        // 종료 확인
        bCheck=false;
        // 비교 -> 같은 수가 저장되었는지 확인
        for(int j=0; j<i; j++) {
        	if(com[j]==su) {
            	bCheck=true;
                break;
            }
        }
     } // while문 false가 되면 종료
     com[i] = su;
}
for (int i : com) {
	System.out.print(i+" ");
    }

 

 8) 변수설정

int kor = 90;
int eng = 85;
int math = 80;

// 점수 출력
System.out.println("국어:"+kor); // + : 문자열 결합, 산술 연산
System.out.println("영어:"+eng);
System.out.println("수학:"+math);

 

2. 연산자 정리

연산자 => 데이터 가공

= 연산시 데이터형 동일해야 -> 연산이 된다 (데이터형을 같게 만든 다음에 연산)

    =====> 형변환

    자동으로 변환 => 작은 데이터 => 큰 데이터

       10 + 10.5

       ==

       10.0

 

       'A' + 1

       ==

       65

    강제로 변환 => 큰 데이터 => 작은 데이터로 변경 (프로그래머가 직접 처리)

                         (type)

     *** int 이하는 연산이 되면 => int로 결과값이 나온다

 = char는 모든 연산시에 정수로 변경

 = 연산자 => 약간의 우선순위

                   => 산술 ( +, - => ", /, % 우선 순위)

 = 연산자의 종류

    단독 사용 : 산술 연산자, 증감 연산자, 대입 연산자

    조건 사용 : 비교 연산자, 논리 연산자, 부정 연산자 (******)

                   =========================

                    1) if문, for문, while문

 

    변수+연산자+제어문 (기능 : 라이브러리)

    =============

byte b1 = 10;
byte b2 = 20;
int b3 = b1 + b2; // byte + byte = int
int a = 10;
long b = 20L;
double d = 10.5;

// a+b+d
// a=10.0 b=20.0 d=10.5

String s = "";
double r = a+b+d;
String c = a+b+d+s;
// String이 가장 큰 데이터

 

3. 제어문 정리

   ====

     1) 조건문

         = 단일 조건문 => 단독 수행

           => if(조건문) { => 조건문 (true/false) 비교연산자, 논리연산자, 부정연산자

                      조건문이 true만 수행하는 문장 : 산술연산자, 대입연산자

                }

         = 선택 조건문 => true/false 나눠서 처리

                if(조건문) {

                    조건문 => true 처리문장

                }

                else {

                    조건문 => false 처리문장

                }

                ==> ID중복체크 => 경우의 수

         = 다중 조건문 => 한개의 조건만 수행

             if(조건문) {

             }

             else if(조건문) {

             }

             else if(조건문) {

             }

             else if(조건문) {

             }

             else {

               조건이 없는 경우에 처리 => 생략이 가능

             }

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Mainform extends JFrame implements ActionListener{
	JMenuBar bar = new JMenuBar();
	JMenuItem open = new JMenuItem("열기");
	JMenuItem save = new JMenuItem("저장");
	JMenuItem copy = new JMenuItem("복사");
	JMenuItem close = new JMenuItem("종료");
	// 생성자 => 클래스 저장
	public Mainform() {
		JMenu file = new JMenu("파일");
		file.add(open);
		file.add(save);
		file.add(copy);
		file.add(close);
		bar.add(file);
		
		// 윈도우 올리기
		setJMenuBar(bar);
		
		// 윈도우 크기 결정
		// setSize(width, height);
		setSize(1024, 768);
		setVisible(true); // 윈도우 보여준다
		
		open.addActionListener(this);
		save.addActionListener(this);
		copy.addActionListener(this);
		close.addActionListener(this);
	}
	public static void main(String[] args) {
		new Mainform();

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==open) {
			JOptionPane.showMessageDialog(this, "파일 열기 선택");
		}
		else if(e.getSource()==save) {
			JOptionPane.showMessageDialog(this, "파일 저장 선택");
		}
	}	
}

 

     2) 선택문

          => 조건이 많이 있는 경우에 주로 사용 (web => 조건 => if)

          => 게임

          => 한개의 값을 선택시에 처리

              => 네트워크

 

          switch(정수, 문자, 문자열) {

                  case 정수:

                    처리

                    break;

                  case 정수:

                    처리

                    break;

                  case 정수:

                    처리

                    break;

                  default:

                    해당 정수가 없는 경우

           }

 

     3) 반복문

           (1) for : 횟수가 지정

               = 제어 => 값 변경, 수정, 다른 기능 : 일반 for

               for (초기값; 조건식; 증가식) {

                       처리 문장

                       처리 문장

               }

               = 출력

              for(실제 데이터를 받을 변수 : 저장된 데이터) => web, mobile

              서버 : JSP, Spring, Oracle

              클라이언트 : HTML, CSS, JavaScript

           (2) while : 종료조건

           (x) do~while:

     4) 반복제어문

            break; 종료

import java.io.*;
public class 제어문정리 {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
        String data="";
        FileReader fr=new FileReader("c:\\javaDev\\a.txt");
        int i=0;
        while((i=fr.read())!=-1)
        {
        	data+=String.valueOf((char)i);
        }
        
        System.out.println(data);
	}

 

4. 문자열

문자열 => 저장하는 공간 (String)

기본형 => 정수, 실수, 논리, 문자

====================================

참조형 => 실제저장장소 다른곳에 있고 => 저장은 주소

====

  = 배열, 클래스, 사용자 정의 클래스 

    => 웹, 모바일 => 문자열

1) 저장 방법

    String s = "문자저장"; ==> 많이 사용된다

    String s = new String("")

 

2) 주요기능

    문자를 제어할 수 있는 기능 (메소드) => 라이브러리 핵심 (메소드)

    ***** 주의점 

    원본 변경되지 않는다

    (1) length() : 문자 갯수

    (2) substring() : 문자를 자를 때

         substring(int start) => 문자 번호

         substring(int start, int end) => end는 제외 (start ~~ end-1)

    예) String s = "Hello Java!!";

                        01234567891011

         s.substring(0,5) ==> Hello ==> s="Hello Java!!" // 원본 안바뀜

         ==> s=s.substring(0,5) ==> s="Hello" // s값 저장하면 바뀜

    (3) contains() : 문자열 중에 포함된 단어가 있는지 확인

        => 단어를 찾는 경우 => 오라클 (LIKE)

    (4) startsWith, endsWith : 서제스트(검색창에 몇 글자만 적어도 자동완성) : 검색기

        ================

        포털 : 검색한 유저의 데이터를 모아서 처리

        쿠키, 세션

    (5) trim() => 좌우의 공백제거

        String s = " Hello Java ";

        s.trim() => "Hello Java" => s.replace(" ","")

       => 사용자 입력창 (로그인 => ID, PWD, 회원가입)

            " admin" "admin " "admin"

String s = " Hello Java ";
System.out.println(s); // " Hello Java "
System.out.println(s.trim()); // "Hello Java"

    (6) equals() => 문자열 비교할 때 사용 : 단점 (대소문 구분)

    (7) split() => 문자를 구분해서 배열로 만들어 준다

             == 구분문자를 포함한다

    (8) replace, replaceAll => 문자를 변경할 경우

         ===== =======

           일반   패턴(정규식)

String s=" Hello Java ";
System.out.println(s.replace('l', 'K')); // " HeKKo Java "
System.out.println(s.replace(' '. '-')); // "-Hello-Java-"

//trim은 좌우 공백만, replace는 중간 공백도 대체

    (9) valueOf() : 모든 데이터형을 문자열로 변경

    (10) toLowerCase() : 소문자로 변환

    (11) toUpperCase() : 대문자로 변환

import javax.swing.*;
import java.awt.event.*;
public class 문자열 extends JFrame implements ActionListener{
	JTextField tf = new JTextField();
	JTextField tf1 = new JTextField();
	public 문자열() {
		add("North",tf);
		add("South",tf1);
		//tf.setText(String.valueOf(20));
		setSize(350, 300);
		setVisible(true);
		
		tf.addActionListener(this); //tf에서 엔터 => actionPerformed호출
	}
	public static void main(String[] args) {
		new 문자열();

	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==tf) { // tf에서 입력 => 엔터
		tf1.setText(tf.getText().toUpperCase());
		//tf1.setText(tf.getText().toLowerCase());
		}
	}

}

로그인 처리 (http://www.jtattoo.net/index.html)

// The JTattoo jar file, jtattoo-1.6.13-sources.zip 다운

// 프로젝트 - Build Path - Configure Build Path - Add External JARs...

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
public class 문자열2 extends JFrame implements ActionListener{
		JLabel la1,la2;
		JTextField tf;
		JPasswordField pf;
		JButton b1,b2;
		JLabel poster=new JLabel();
		final String ID = "Admin";
		final String PWD = "1234";
	public 문자열2() {
			la1 = new JLabel("ID");
			la2 = new JLabel("PW");
			tf = new JTextField(); // 입력창
			pf = new JPasswordField();
			b1 = new JButton("로그인");
			b2 = new JButton("취소");
			
			String s = "https://movie-phinf.pstatic.net/20161123_188/1479862185516tYkKO_JPEG/movie_image.jpg";
			try {
				poster.setIcon(new ImageIcon(new URL(s)));
			}catch(Exception ex) {}
			setLayout(null);
			
			la1.setBounds(10, 15, 30, 30);
			tf.setBounds(45, 15, 150, 30);
			la2.setBounds(10, 50, 30, 30);
			pf.setBounds(45, 50, 150, 30);
			
			poster.setBounds(10, 135, 300, 300);
			add(poster);
			JPanel p = new JPanel();
			p.add(b1);p.add(b2);
			p.setBounds(10, 90, 195, 35);
			
			add(la1);add(tf);
			add(la2);add(pf);
			add(p);
			
			setSize(800, 600);
			setVisible(true);
			setDefaultCloseOperation(EXIT_ON_CLOSE);
			//Integer.MAX_VALUE;
			b1.addActionListener(this); // 로그인
			b2.addActionListener(this); // 취소
			
	}
	public static void main(String[] args) throws Exception {
		 UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
		 new 문자열2();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==b1) { // 로그인 버튼 클릭
			String id = tf.getText();
			if(id.trim().length()<1) { // length가 0, 입력이 안됐다면
				JOptionPane.showMessageDialog(this, "ID를 입력하세요!!");
				tf.requestFocus();
				return;
			}
			String pwd=String.valueOf(pf.getPassword()); // 값을 문자열로 읽어옴
			if(id.trim().length()<1) { // length가 0, 입력이 안됐다면
				JOptionPane.showMessageDialog(this, "Password를 입력하세요!!");
				pf.requestFocus();
				return;
			}
			
			// 입력이 완료
			// 처리
			
			
			if(id.equalsIgnoreCase(ID)) { // 대소문자 구분없이 처리
				if(pwd.equals(PWD)) {
					JOptionPane.showMessageDialog(this, id+"님 로그인되었습니다");
				}
				else {
					JOptionPane.showMessageDialog(this, "Password가 틀립니다");
					pf.setText("");
					pf.requestFocus();
				}
			}
			else {
				JOptionPane.showMessageDialog(this, "ID가 존재하지 않습니다");
				tf.setText("");
				pf.setText("");
				tf.requestFocus();
			}
		
		}
		else if(e.getSource()==b2) { // 취소
			System.exit(0); // 정상종료
		}
	}
}

 

반응형
Comments