1.定义ExceptionTest类,其中的静态成员方法div(int a,int b)实现返回两参数相除的结果,该方法对可能产生的除数为0的不做处理只声明抛出异常;而在main()方法中调用div()方法,并用try...catch...finally语句捕获。按要求编写程序。

    源代码:

package text;

import java.util.*;

public class ExceptionTest {

public static int div(int a,int b) throws

ArithmeticException{

if(b==0){

ArithmeticException e = new ArithmeticException("除数不能为0");//创建异常对象

throw e;//抛出异常对象

}

return (a/b);

}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

while(true){

System.out.print("请输入a的值:");

int a=scanner.nextInt();

System.out.print("请输入b的值:");

int b=scanner.nextInt();

try{

System.out.println("a除b:"+(a/b));

}catch(ArithmeticException e){   //捕获AritheticException异常

System.out.println("出现算数异常:"+e.getMessage());

}catch(Exception e){    //捕获异常

System.out.println("出现异常!");

}finally{

System.out.println("finally语句总会被执行");

}

}

}

}

 

2.自定义数字范围异常类NemberRangeException,该类成员有:描述异常信息的成员变量message、对message进行初始化的构造方法以及重写返回message值的toString()方法。

请编写程序计算两个整数之和,当任意一个数超出自定义范围时,抛出NumberRangeException异常。

    源代码:

package text;

import java.util.Scanner;

public class NumberRangeException extends Exception {

public static Scanner scanner=new Scanner(System.in);

public static String message;

public NumberRangeException(String message){

super(message);//调用父类的方法

this.message = message;

}

public String getMessage(){

return message;

}

public String toString(){

return message;

}

public static void main(String[] args) throws NumberRangeException{

while(true){

try{

System.out.print("请输入a的值:");

int a=scanner.nextInt();

System.out.print("请输入b的值:");

int b=scanner.nextInt();

if((a>=50)||(a<=10)){

throw new NumberRangeException("输入的数超出自定义范围,出现异常!");

}

System.out.println("a与b的和为:"+(a+b));

}catch(NumberRangeException e){

System.out.println(e.toString());

System.out.println("请重新输入!");

}finally{

System.out.println("finally语句总会被执行!");

}

}

}

 

}

 

 

3.自定义表示栈满和栈空的异常类StackFullException和StackEmptyException。当向满了的栈里存储元素时产生StackFullException异常;当删除空栈中元素时会产生StackEmptyException异常。每个自定义异常类的构造方法都调用父类Exception中的带参数构造方法,并且两个类都重写toString()方法,该方法返回描述异常的信息。

请编写简单的栈类SimpleStack,该类成员包含:

(1)存放栈中元素的数组和栈顶索引;

(2)创建指定大小空栈的构造方法;

(3)提供栈的基本功能的方法:将数据压入栈中push()方法,移除栈顶数据pop()方法,判断栈满isFull()方法以及判定栈空isEmpty()方法。并在push()和pop()方法中分别添加栈满和栈空异常,以报告错误。

源代码

package DefineTestStackException;

 

@SuppressWarnings("serial")

public class StackFullException extends Exception {

/**

 * @return 

 *

 */

 

public StackFullException(SimpleStack sp){

sp.StackFull(sp);

}

 

}

 

package DefineTestStackException;

 

@SuppressWarnings("serial")

public class StackEmptyException extends Exception {

/**

 *

 */

 

 

public StackEmptyException(SimpleStack sp) {

sp.StackEmpty(sp);

}

}

 

package DefineTestStackException;

 

public class SimpleStack implements IMyStack {

 

    private int [] objs = new int [4];

    int size;

 

    

    public void push(int data) {

        objs[size++]= data;

    }

    public int pop() {

        if(size==0){

            return 0;

        }

        return objs[--size];

    }

 

    public int length() {

        return size;

    }

    /**判断栈满*/

    public boolean isFull(){

     return size==4;

    }

 

    /**判断栈空*/

    public boolean isEmpty() {

        return size==0;

    }

 

    /**清除栈中的元素*/

    public void clear() {

        for (int i = 0; i < size; i++) {

            objs[i] = 0;

        }

        size = 0;

    }

    @Override

    public String toString(){

        StringBuffer sb = new StringBuffer();

        sb.append("MyArrayStack:[");

        for (int i = 0; i < size; i++) {

            sb.append(objs[i]);

            if(i != size-1){

                sb.append(",");

            }

        }

        sb.append("]");

        return sb.toString();

    }

    public void StackFull(SimpleStack sp) {

if(sp.size==sp.length()){

System.out.println("栈满了!");

}else{

System.out.println("栈空了");

}

}

    public void StackEmpty(SimpleStack sp) {

if(sp.isEmpty()==true){

System.out.println("栈空了!");

}else{

System.out.println("栈没空");

}

}

@Override

public void push(Integer data) {

// TODO Auto-generated method stub

}

}

 

package DefineTestStackException;

/**定义一个接口类*/

public interface IMyStack {

 

public void push(Integer data);//实现数据的加入

 

public int pop();//移除栈顶元素

 

public int length();

 

public boolean isEmpty();

public boolean isFull();

 

public void clear();

 

}

package DefineTestStackException;

 

public class Test {

public static void main(String[] args) throws StackFullException, StackEmptyException {

SimpleStack sist = new SimpleStack();

sist.push(45);

sist.push(56);

sist.push(67);

if (sist.size == 0) {

throw new StackEmptyException(sist);

}

if (sist.size == sist.length()) {

throw new StackFullException(sist);

}

System.out.println(sist.toString());

}

 

}

 

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐