華爲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來處理。