华为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异常类的结构如下

华为2013机试题

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来处理。