華爲2013機試題

華爲2013年在長沙的一個機試題是判斷潤年。年份要求是四位數。

輸入樣例:

2012

2122

afdsfa

22.33

輸出樣例:

YES

NO

ERROR

 

我的答案是:

 

package cn.william;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 * 華爲2013年機試題:求潤年
 * @author william
 *
 */
public class Test extends JFrame{
	private JLabel lable;
	private JTextField field;
	
	public static void main(String[] args){
		Test frame = new Test();
		frame.init();
	}
	
	public void init(){
		this.setSize(400, 250);
		this.setLayout(null);
		lable = new JLabel("請輸入年份:");
		field = new JTextField();
		lable.setBounds(140, 90, 120, 30);
		field.setBounds(140, 120,120, 30);
		this.add(field);
		this.add(lable);
		this.setVisible(true);
		
		field.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String year = field.getText().toString();
				if(year.length() != 4){
					System.out.println("ERROR");
					return;
				}
				int y = 0;
				
				try{
					y = Integer.parseInt(year);
				}catch(Exception ex){
					System.out.println("ERROR");
					return;
				}
				
				
				check(y);
			}
		});
	}
	
	private void check(int year){
		
		if(year == 0){
			System.out.println("ERROR");
			return;
		}
		
		if(year % 100 == 0){
			if(year % 400 == 0){
				System.out.println("YES");
			}else{
				System.out.println("NO");
			}
		}else{
			if(year % 4 == 0){
				System.out.println("YES");
			}else{
				System.out.println("NO");
			}
		}
	}

}

 

 

順便複習一下java異常的知識。

異常定義:能讓程序意外中斷運行的指令流。

java異常類的結構如下

Throwable包括了一切的異常。ERROR是JVM的異常,不可以用我們的代碼處理。Exception是我們程序中可能出現的異常,可以處理。

RuntimeException和Exception的關係:

RuntimeException繼承自Exception,RuntimeException和它的子類可以不用try catch進行處理。

 

ry{
	y = Integer.parseInt(year);
}catch(Exception ex){
	System.out.println("ERROR");
	return;
}

 

其實這裏 Integer.parseInt(year) 可能會拋出NumberFormatException的,但是eclipse並沒有提示這句代碼需要處理異常,因爲NumberFormatException是RuntimeException的子類。

當然因爲RuntimeException是Exception的子類,所以,也可以用try catch來處理。