题目:

java实验6(图1)

异常重输入的例子:

int num;
boolean input=false; //代表还没输入或输入错误
System.out.println("输入数字:");
Scanner scan=new Scanner(System.in);
while(input==false){
	try{
	        num=Integer.parseInt(scan.nextLine());
		input=true; //上面没出异常才能执行本行,从而跳出输入循环
	}catch(Exception e){
		input=false;
		System.out.println("输入的不是数字,请重新输入");
	}
}

实验代码:

import java.util.*;
class MYException extends ClassCastException{
	public MYException(String ErrorMessage){
		super(ErrorMessage);
	}
}
class Time{
	private String time="";
	void stetime(String time){
		this.time=time;
	}
	String gettime(){
		return this.time;
	}
	
	
	void yichang(){
		this.time="输入时间格式不对";
	}
    
	void changetime(int m){//逻辑代码块,转换时间
		int times=0;
		String TTime="am";
		
			int hour=Integer.parseInt(this.time.substring(0,m));
			int mutime=Integer.parseInt(this.time.substring(m+1,this.time.length()));
			if(!((hour<=24&&hour>=0)&&(mutime>=0&&mutime<=60))){
				this.yichang();
				return;
			}
			if(hour>=12){
				TTime="pm";
				if(hour>=13)
				     hour-=12;
			}
			this.time=hour+":"+mutime+TTime;
	}
}
public class yourname {

	/**
	 * @param args
	 */
	static int m=-3;
	static void pop(String time) throws MYException{
		//长度不允许大于五
    	if((time.length())>5||(time.length())<4)throw new MYException("");
    	
    	
    	
    	//第三个位置或者第二个位置必须为分号
    	boolean a=(time.substring(2,3)).equals(":");
    	boolean b=(time.substring(1,2)).equals(":");
    	if(!((!a&&b)||(a&&!b))){
    		
    		
    		throw new MYException("");
    		} 
    	if((time.substring(1,2)).equals(":")) m=1;
    	if((time.substring(2,3)).equals(":")) m=2;
    	
    	
    	
    	String c="0123456789:";
    	for(int i=0;i<time.length();i++){
    		if((c.indexOf(time.substring(i,i+1)))==-1) throw new MYException("");
    	}
    	
	}
	public static void main(String[] args) {
		int x=0;
		boolean input=false; //代表还没输入或输入错误
		System.out.print("输入数字:");
		Scanner scan=new Scanner(System.in);
		//输入x
		while(input==false){
			try{
				x=Integer.parseInt(scan.nextLine());
				if(x<=0) throw new Exception("x不可以为负数");
				input=true; //上面没出异常才能执行本行,从而跳出输入循环
			}catch(Exception e){
				input=false;
				System.out.print("输入的不是数字或者小于1,请重新输入:");
			}
		}
		//输入时间(定义时间类存储)
		Time[] Stime=new Time[x];
		for(int i=0;i<x;i++){
			Stime[i]=new Time();
			String S=scan.nextLine();
			Stime[i].stetime(S);
			try{
				   pop(S);
				    Stime[i].changetime(m);
			}catch(MYException e){
				System.out.print(e.getMessage());
				Stime[i].yichang();
			}
			
		}
		//输出结果
		System.out.println("输出结果:");
		for(int i=0;i<x;i++){
			
			System.out.println(Stime[i].gettime());
		}
		
	}

}

这次实验我的代码比较长,是因为在解决时间格式的问题上我考虑的比题目要求的更多;


思考:

        在存储答案上,我使用的是对象数组进行储存,这可能对部分人来说有些许难度,所有下面采取一种String方式存储对时间判定的答案;



代码:

import java.util.*;
class MYException extends Exception{
	public MYException(String e){
		super(e);
	}
}
public class luqincai {

	/**
	 * @param args
	 */
	static String Pd(String time) throws MYException{
		//判断长度
		if(time.length()!=5){
			
			throw new MYException("");
		}
		
		//判断是否有字母或者其他字符
		String c="1234567890:";
		for(int i=0;i<time.length();i++){
			if((c.indexOf(time.substring(i,i+1)))==-1){
				throw new MYException("");
			}
		}
		
		if((c.indexOf(time.substring(2,3)))==-1){
			throw new MYException("");
		}
		
		
		//判断时间是否符合范围
		int hour = Integer.parseInt(time.substring(0,2));
		int muin = Integer.parseInt(time.substring(3,5));
	    if((hour>23||hour<0)||(muin>59||muin<0)) throw new MYException("");
	    
	    //判断是否为下午
	    if((hour>12&&hour<24)) {
	    	hour-=12;
	    	return hour+":"+muin+"pm\n";
	    }
	    	
	    return hour+":"+muin+"am\n";
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//时间个数
		int N=0;
		boolean input=false; //代表还没输入或输入错误
		System.out.println("输入数字:");
		Scanner scan=new Scanner(System.in);
		while(input==false){
			try{
				N=Integer.parseInt(scan.nextLine());
				input=true; //上面没出异常才能执行本行,从而跳出输入循环
			}catch(Exception e){
				input=false;
				System.out.println("输入的不是数字,请重新输入");
			}
		}
		String times="";//存每个时间判定结果
		System.out.println("输入时间:");
		for(int i=0;i<N;i++){
			String time=scan.nextLine();
			try{
				String s=Pd(time);
				times+=s;
			}catch(MYException e){
				times+="时间格式不正确\n";
			}
		}
		
		System.out.println(times);

	}

}

这个代码比较简洁,思路呢也还算是比较清晰;