글 목록

Javascript 2차원 배열

2차원 배열 예제 중 하나입니다.

var a = [[7,9,4,7,2],[3,4,6,7,2],[3,2,6,9,8]] 
var b = [0,0,0,0,0,0,0,0,0,0]; 
 
for(var i = 0; i < 3; i++) { 
    for(var j = 0; j < 5; j++) { 
        b[a[i][j]]++; 
    } 
} 
for(var k = 1; k < 10; k++) { 
    document.write(k + "의 개수 : " + b[k] + "<br>"); 
} 
document.write("0의 개수 : " + b[0]);

 
확인하기

Java 그래픽 프로그램 응용

package graphic; 
 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
 
import javax.imageio.ImageIO; 
import javax.swing.*; 
 
// 소스를 입력하고 Ctrl+Shift+O를 눌러서 필요한 파일을 포함한다.  
 
class MyPanel3 extends JPanel{ 
    Font f1, f2; 
 
  BufferedImage img = null; 
  int img_x = 100, img_y = 100; 
    int img_w = 62, img_h = 45; //w와 h 는 각각 width와 height를 나타냄 
  //이 둘의 수치는 car.gif를 따름 
 
  private Color color = new Color(255,255,255); 
 
  public MyPanel3() { 
    try { 
      img = ImageIO.read(new File("car.gif")); //car.gif를 받아옴 
 
    } catch (IOException e) { //예외처리(car.gif가 없을 경우) 
      System.out.println("no image"); 
      System.exit(1); //프로그램 종료 
    } 
 
        f1 = new Font("Serif", Font.PLAIN, 20); 
        f2 = new Font("San Serif", Font.BOLD, 20); 
 
    addKeyListener(new KeyListener() { 
      public void keyPressed(KeyEvent e) { 
        int keycode = e.getKeyCode(); 
        switch (keycode) { 
        case KeyEvent.VK_UP:	img_y -= 10;	break; 
        case KeyEvent.VK_DOWN:	img_y += 10;	break; 
        case KeyEvent.VK_LEFT:	img_x -= 10;	break; 
        case KeyEvent.VK_RIGHT:	img_x += 10;	break; 
        case KeyEvent.VK_SPACE: changeColor(); break; 
        } 
        repaint(); 
      } 
      public void keyReleased(KeyEvent arg0) { } 
      public void keyTyped(KeyEvent arg0) { } 
            public void changeColor() { //changeColor메소드는 스페이스바가 눌려질 때 마다 호출된다. 
                color = new Color( (int) (Math.random()*255.0), 
                        (int) (Math.random()*255.0), 
                        (int) (Math.random()*255.0) 
                ); 
                //호출됬을 때 색상을 무작위로 하고 
                repaint(); //다시 화면에 그려준다. 
            } 
 
    }); 
 
        addMouseMotionListener(new MouseMotionAdapter() { 
            public void mouseDragged(MouseEvent e) { 
                moveCar(e.getX(), e.getY()); 
            } 
        }); 
    this.requestFocus(); 
    setFocusable(true); 
  } 
 
    private void moveCar(int x, int y) { 
        int OFFSET = 1; 
        if ((img_x != x) || (img_y != y)) { 
            repaint(img_x, img_y, img_w + OFFSET, img_h + OFFSET); 
            img_x = x; 
            img_y = y; 
            repaint(img_x, img_y, img_w + OFFSET, img_h + OFFSET); 
        } 
    } 
 
  public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
        g.setColor(color); //색상은 color에서 받아온다 
        g.fillRect(0,0,600,400); //총 크기는 600 * 400 
 
        g.setFont(f1); 
        g.setColor(Color.black); 
        //여기서 setColor를 따로 주지 않을 시, 
        //폰트 역시 백그라운드 색상과 동일하게 되어 
        //보이지 않게 됨. 
        g.drawString("마우스를 드래그 하면 그림이 움직입니다.", 0, 50); 
        g.setFont(f2); 
        g.setColor(Color.black); 
        g.drawString("스페이스바를 누르면 배경색이 바뀝니다.", 0, 70); 
 
        g.drawImage(img, img_x, img_y, null); 
  } 
} 
 
public class CarGameTest extends JFrame { 
  public CarGameTest() { 
    setSize(600, 400); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setTitle("그래픽 프로그램 응용"); 
    add(new MyPanel3()); 
    setVisible(true); 
  } 
 
  public static void main(String[] args) { 
    CarGameTest s = new CarGameTest(); 
  } 
}

 

Java MouseAdapter와 MouseMotionAdapter 예제

package gui; 
 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
 
/** 
 * Created by capta on 2016-05-12. 
 */ 
class MyFrame extends JFrame { 
    private JPanel panel; 
    private JLabel label; 
 
    public MyFrame() { 
        setTitle("Mouse Event"); 
        setSize(500, 500); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 
        panel = new JPanel(); 
        panel.setBackground(Color.lightGray); //기본 백그라운드 : 라이트그레이 
 
        panel.addMouseListener(new MyMouseAdapter()); //마우스 어댑터로 마우스이벤트 사용 
        panel.addMouseMotionListener(new MyMouseMotionAdapter()); //마우스 모션어댑터로 모션이벤트 사용 
 
        label = new JLabel(); //좌표출력할 레이블 
        panel.add(label); 
 
        add(panel); 
 
        setVisible(true); 
    } 
    class MyMouseAdapter extends MouseAdapter { //마우스어댑터 
        public void mousePressed(MouseEvent e) { //Pressed일때 
            panel.setBackground(Color.pink); 
        } 
        public void mouseReleased(MouseEvent e) { //Released일때 
            panel.setBackground(Color.lightGray); 
        } 
    } 
    class MyMouseMotionAdapter extends MouseMotionAdapter { //마우스 모션어댑터 
        public void mouseMoved(MouseEvent e) { //마우스가 움직일 때 
        display(e); //display메소드 호출 
        } 
    } 
 
    protected void display(MouseEvent e) { //display메소드 
        label.setText(" X:" + e.getX() + " Y:" + e.getY()); //레이블 텍스트 변경 
    } 
} 
public class MyFrameTest { 
    public static void main(String[] args) { 
        MyFrame t = new MyFrame(); 
    } 
} 

SQL 학과별로 최대지도비의 교수와 지도비찾기

select pname, dsal, deptno 
from prof 
where (deptno,dsal) in 
( 
    select deptno, max(dsal) 
    from prof 
    group by deptno 
);

여기서 눈 여겨 볼 것은 where (deptno,dsal)부분이다.

서브쿼리 안의 select가 deptno, max(dsal)이므로 where절 역시 deptno와 dsal을 해 줘야 한다.

또, 학과별로 여러 값이 나와야하므로 =이 들어가는게 아닌 in이 있어야 한다.

실행결과

이용신	250	1003 
홍성현	300	1001 
이순신	250	1002 
최철환	230	1007 
고재우	250	1004 
민병관	250	1005

 

SQL 다중행 서브쿼리

비교연산자 >, <, =, <>는

각각 한 개의 값을 비교하는 연산자이다.

하지만 여러개의 값을 비교해야하는 일이 생길 수 있는데,

이런 경우엔 다중행 서브쿼리를 사용할 수 있다.

select pname, dsal 
from prof 
where dsal > All 
( 
select avg(dsal) from prof 
group by deptno 
);

해당 SQL문을 실행하면 avg(dsal)은 한 개의 값이 아님에도 문제없이 실행이 되는 것을 볼 수 있다.

실행결과

고재우	250 
이용신	250 
민병관	250 
이순신	250 
장민주	280 
홍성현	300

최댓값은 ALL로 나타낼 수 있으며, 반대로 최솟값은 ANY로 나타낼 수 있다.