【Java】Java学习笔记(6)——Java内部类与异常类作业函数题

本人私人博客:Megalomania,大部分文章会现在博客上传,有不足之处欢迎指正。

学校小学期Java课程的练习题,留个档便于以后需要时候有例子可以回忆,写的烂的地方请多多包含

1、计算输入4个数的和

  • 描述:定义一个int型数组,输入3个正数1个负数赋值给数组。利用断言性质,规定计算和的时候不允许出现负数,在关闭断言情况下,计算输入数的和。
  • 代码
import java.util.Scanner;
public class Example7_6 {
  @SuppressWarnings("resource")
    public static void main (String args[ ]) {
        int [] score ={0,0,0,0};
        System.out.println("请输入3个正数,1个负数");
        Scanner scanner = new Scanner(System.in);
		//TODO:将输入的数赋值给score[]数组
        for (int i=0;i<score.length;i++){
            score[i] = scanner.nextInt();
        }
        int sum=0;
        for(int number:score) {
            assert number>0:"负数不能是成绩";
		    //TODO:计算总成绩
            sum=sum +number;
       }
       System.out.println("总成绩:"+sum);
   }
}

2、处理数组越界异常

  • 描述:定义一个长度为8的课程数组,数组内容已初始化完毕。随机输入课程的序号,获取课程的名称,进行输出,如果不存在则捕捉数组越界的异常。
  • 代码
import java.util.Scanner;
/**
 * TODO: 定义一个长度为8的课程数组,随机输入课程的序号,获取课程的名称,进行输出,如果不存在则捕捉数组越界的异常
 * 如:输入:12,12已结超过8门课程的范围,捕获异常后打印:  java.lang.ArrayIndexOutOfBoundsException: 12
 *    输入:2,输出:英语
 */
public class Example7_149 {
 	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("输入课程的序号");
		int index = sc.nextInt();
		String[] courses = {"数学","语文","英语","计算机","物理","化学","生物","地理"};
		try {
			String course = courses[index];
			System.out.println(course);
		//TODO:输入课程的序号,超过数组最大长度,捕捉数组越界异常
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println(e);
		}
	}
}

3、自定义异常

  • 描述:自定义两个异常类,名称超长异常类和超短异常类。输入账号名称,如果大于10,抛出“账号名称超长”的自定义异常, 如果小于5,抛出“账号名称超短”的自定义异常。参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
  • 代码
import java.util.Scanner;
/**
 * TODO: 输入账号名称,如果大于10,抛出“账号名称超长”的自定义异常, 如果小于5,抛出“账号名称超短”的自定义异常
 * 参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
 * 例如:输入:红色宝马   输出: StringTooShortException: 账号名称超短,必须大于5个字符
 * 例如:输入:红红黄黄蓝蓝   输出:账号名称校验通过
 * 例如:输入:红红黄黄蓝蓝绿绿紫紫白白   输出:StringTooLongException: 账号名称超长,必须小于10个字符
 */
public class Example7_152 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("输入账号名称");
		String str = sc.next();
		try {
			if (str.length() > 10) {
				//抛出账号名称超长的自定义异常
				throw new StringTooLongException();
			}
			if (str.length() < 5){
				//抛出账号名称超短的自定义异常
				throw new StringTooShortException();
			}
			System.out.println("账号名称校验通过");
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}
/**
 * 自定义异常,账号名称超长异常
 *
 */
class StringTooLongException extends Exception{ 
	public StringTooLongException(){
		super("账号名称超长,必须小于10个字符");
	}
}
/**
 * TODO:参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
 * 异常提醒说明为“账号名称超短,必须大于5个字符”
 */
class StringTooShortException extends Exception{
    public StringTooShortException(){
        super("账号名称超短,必须大于5个字符");
    }
}

4、自定义异常类,计算银行收入、支出情况

  • 描述:自定义一个异常类,继承Exception。定义一个银行类,包含有int型变量money,和计算收入的方法,以及获取金额的方法。银行收入为正数,支出为负数。根据收入、支出计算本次纯收入、最终存款,使用自定义异常类捕获收入、支出的异常情况并输出原因还有最终存款。
  • 代码
import java.util.Scanner;
class Bank {
    private int money;
    public void income(int in,int out) throws BankException {
       if(in<=0||out>=0||in+out<=0) { 
			//TODO: 方法抛出异常,导致方法结束,下面语句不能执行
            throw new BankException(in, out);
       }
        int netIncome=in+out;
       System.out.printf("本次计算出的纯收入是:%d元\n",netIncome);
       money=money+netIncome;
    }
    public int getMoney() {
       return money;
    }
}
class BankException extends Exception {
	   String message;
	   public BankException(int m,int n) {
	       message="入账资金"+m+"是负数或支出"+n+"是正数,不符合系统要求.";
	   }
	   public String warnMess() {
	       return message;
	   }
	}
public class Example7_5 {
    public static void main(String args[]) {
        Bank bank=new Bank();
        try{
    	    System.out.println("请输入银行收入、支出(收入正数 支出负数):");
    	    Scanner scanner = new Scanner(System.in);
		    //TODO:调用bank.income方法,传入的参数为输入的两个数
            bank.income(scanner.nextInt(), scanner.nextInt());
            System.out.printf("银行目前有%d元\n",bank.getMoney());
            System.out.println("请输入银行收入、支出(收入负数或支出正数):");
            //TODO:调用bank.income方法,传入的参数为输入的两个数  
            bank.income(scanner.nextInt(), scanner.nextInt());
        }
        catch(BankException e) {
            System.out.println("计算收益的过程出现如下问题:");
            System.out.println(e.warnMess()); 
      }
      System.out.printf("银行目前有%d元\n",bank.getMoney());
   }
}

5、输入三个数字,其中第二个数字为非法数字,系统捕获异常输出,然后自定义异常输出。

  • 描述:定义三个int型变量并初始化完毕,打印输出初始化的内容。然后输入三个数给他们赋值,利用try-catch捕获异常,测试异常语句下面的代码是否执行,然后自己手动抛出一个异常,打印输出结果。
  • 代码
import java.util.Scanner;
public class Example7_4 {
    public static void main(String args[]) {
        int n = 0,m = 0,t = 1000;
        try{
    	    System.out.println("初始化n=0 m=0 t=1000");
    	    System.out.println("请输入三个数给n,m,t赋值(其中输入m非法数字)");
    	    /*
		    TODO:将输入的字符串转化成整数,发生异常,转向catch
            发生异常的部分后面的代码没有执行
		    */
            Scanner scanner = new Scanner(System.in);
    	    n = Integer.parseInt(scanner.next());
            m = Integer.parseInt(scanner.next());
            t = Integer.parseInt(scanner.next());
      }
      catch(NumberFormatException e) {
            System.out.println("发生异常:"+e.getMessage());
      }
      System.out.println("n="+n+",m="+m+",t="+t);
      try{
		  System.out.println("故意抛出I/O异常!");
      	  throw new java.io.IOException("我是故意的");
            //System.out.println("这个输出语句肯定没有机会执行,所以必须注释掉,否则编译出错");
      }
      catch(java.io.IOException e) {
            System.out.println("发生异常:"+e.getMessage());
      }
   }
}

6、根据输入装载量,计算货车装载量是否超重

  • 描述:自定义异常类输出异常信息,货车类计算转载量,最大装载量为1000,根据输入数据求和判断是否大于1000,大于不好异常信息输出,不大于继续输入,输出当前装载量。
  • 代码
import java.util.Scanner;
 /* TODO: 完成自定义异常类,实现捕获异常 */
class DangerException extends Exception {
   final String message = "超载";
   public String warnMess() {
       return message;
   }
}
class CargoBoat {
     int realContent;  //装载的重量
     int maxContent;   //最大装载量
     public void setMaxContent(int c) {
         maxContent = c;
     }
     public void loading(int m) throws DangerException {
      /* TODO: 判断是否大于最大装载量1000,大于最大装载量抛出异常 */
        if(m+realContent>maxContent){
            throw new DangerException();
        }
        realContent += m;
        System.out.println("目前装载了"+realContent+"吨货物");
     }
}
public class Example7_7 {
   public static void main(String args[]) {
      CargoBoat ship = new CargoBoat();
      ship.setMaxContent(1000);
      int m =0;
      try{
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入装载量(最大量1000)");
            /* TODO: 把输入的值赋值给m
                   调用方法loading */
            m = scanner.nextInt();
            ship.loading(m);
            System.out.println("请输入装载量(最大量1000)");
            /* TODO: 把输入的值赋值给m
                   调用方法loading */
            m = scanner.nextInt();
            ship.loading(m);
            System.out.println("请输入装载量(最大量1000)");
            /* TODO: 把输入的值赋值给m
                   调用方法loading */
            m = scanner.nextInt();
            ship.loading(m);
            System.out.println("请输入装载量(最大量1000)");
            /* TODO: 把输入的值赋值给m
                   调用方法loading */
            m = scanner.nextInt();
            ship.loading(m);
        }
        catch(DangerException e) {
            System.out.println(e.warnMess()); 
            System.out.println("无法再装载重量是"+m+"吨的集装箱");
        }
        finally {
            System.out.printf("货船将正点启航");
        }
    }
}

文章转载请注明本人博客地址:
转载自:Megalomania - 【JAVA】JAVA学习笔记(6)——JAVA内部类与异常类作业函数题

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值