日期:2014-05-20  浏览次数:20833 次

java初学者,求助,异常处理的问题。
import java.io.IOException;
import java.util.*;
//1.编写一个程序,允许用户向一个大小为10的数组输入整型值。程序应通过索引,或者通过指定一个大于0的值来查找数组元素,
//从而获得数组中的值。程序应处理任何在向数组输入数值或访问数组元素时发生的异常。
//此外,程序应使用自定义一个NumberNotFoundException异常处理类。
//如果试图访问超出数组边界的元素,则捕获ArrayIndexOutOfBoundsException异常,并显示一个合适的错误消息。
public class Array {

public void test1() throws NumberNotFoundException{
try{
int[] arr=new int[10];
for(int j=0;j<arr.length;j++){
byte[] b=new byte[1024];
System.out.println("请输入要存放到数组中的值:");
System.in.read(b);
String str=new String(b).trim();
int num=Integer.parseInt(str);
arr[j]=num;
}
System.out.println("获取完毕!");
Scanner in=new Scanner(System.in);
System.out.println("查找数组请输入:");
int x=in.nextInt();
for(int i=0;i<arr.length;i++){
if(arr[x]==arr[i]){
System.out.println("你输入的数组与第"+i+"个值为:"+arr[i]+"的数组相同");
}
}
}catch(IOException io){
io.printStackTrace();
}
catch(ArrayIndexOutOfBoundsException a){
a.printStackTrace();
System.out.println("数组越界异常。");
}
catch(Exception e){
throw new NumberNotFoundException("asd自定义异常错");
}finally{
System.out.println("finally");
}
}

public static void main(String[] args) {
Array aa=new Array();
try{
aa.test1();
}catch(NumberNotFoundException n){
System.err.println(n.getMessage());
}
}
}


上面是第一题的源码,NumberNotFoundException 这个异常类已经创建好了!!然后第二题就不知道怎么办了,想不出什么能够接触的,初学者,快疯癫了。下面是第二题题目。。

//2.修改1的程序,创建一个名为DuplicateValueException的异常类,以检测用户是否输入了重复的数。
//如果用户输入的数已经存在于数组中,则应该抛出一个DuplicateValueException异常。此外,还要显示一个合适的错误信息。
//在处理完异常后,程序应该能够继续正常的执行。


哪位大神帮帮忙,十分感谢

------解决方案--------------------
把你的数据,封装成string类型,用正则表达式进行判断,

例如:String s=new Integer(1223213).toString();
      s.replaceAll("(.)\\1+","#");//将所有的重复数字替换为#,接下来判断是否含有#,如果有,则报异常,否则,不报。
       boolean b=s.contains('#') ;//b为true表示包含,则抛异常,

     



------解决方案--------------------
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
class NumberNotFoundException extends Exception{
public NumberNotFoundException(){
super();
}
public NumberNotFoundException(String s){
super(s);
}
}
class DuplicateValueException extends Exception{
public DuplicateValueException(){
super();
}
public DuplicateValueException(String s){
super(s);
}
}
public class Array {

public void test1() throws NumberNotFoundException, DuplicateValueException {
try {
int[] arr = new int[10];
for (int j = 0; j < arr.length; j++) {
byte[] b = new byte[1024];
System.out.println("请输入要存放到数组中的值:");
System.in.read(b);
String str = new String(b).trim();
int num = Integer.parseInt(str);

arr[j] = num;
for(int i=0;i<j;i++){
if(arr[i]==arr[j]){
throw new DuplicateValueException("数据重复");


}else{
arr[j] = num;
}
}



}
System.out.println("获取完毕!");

Scanner in = new Scanner(System.in);
System.out.println("查找数组请输入:");
int x = in.nextInt();
for (int i = 0; i < arr.length; i++) {
if (arr[x] == arr[i]) {
System.out.println("你输入的数组与第" + i + "个值为:" + arr[i]
+ "的数组相同");
}
}
} catch (IOException io) {
io.printStackTrace();
} catch (ArrayIndexOutOfBoundsException a) {
a.printStackTrace();
System.out.println("数组越界异常。");
} catch(DuplicateValueException e){
throw new DuplicateValueException("数据重复");
}
catch (Exception e) {
throw new NumberNotFoundException("asd自定义异常错");
} finally {
System.out.println("finally");
}
}