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