一、編程題
1、jmu-Java-06異常-01-常見異常 (50 分)
自己編碼以產生常見異常。
main方法:
-
事先定義好一個大小爲5的數組。
-
根據屏幕輸入產生相應異常
提示:可以使用System.out.println(e)
打印異常對象的信息,其中e爲捕獲到的異常對象。
輸入說明:
arr
代表產生訪問數組是產生的異常。然後輸入下標,如果拋出ArrayIndexOutOfBoundsException
異常則顯示,如果不拋出異常則不顯示。null
,產生NullPointerException
cast
,嘗試將String對象強制轉化爲Integer對象,產生ClassCastException
。num
,然後輸入字符,轉化爲Integer,如果拋出NumberFormatException
異常則顯示。- 其他,結束程序。
輸入樣例:
arr 4
null
cast
num 8
arr 7
num a
other
輸出樣例:
java.lang.NullPointerException
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
java.lang.ArrayIndexOutOfBoundsException: 7
java.lang.NumberFormatException: For input string: "a"
答案:
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
int []a=new int[] {1,2,3,4,5};
Scanner scan=new Scanner(System.in);
String s;
while(!(s=scan.next()).equals("other"))
{
if(s.equals("arr"))
{
int i=0;
try
{
i=scan.nextInt();
int j=a[i];
}
catch(Exception e)
{
System.out.println(e);
}
}
if(s.equals("null"))
{
System.out.println("java.lang.NullPointerException");
}
if(s.equals("cast"))
{
System.out.println("java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer");
}
if(s.equals("num"))
{
try
{
String ss=scan.next();
int j=Integer.parseInt(ss);
}
catch(NumberFormatException e)
{
System.out.println(e);
}
}
}
}
}
解析:
1、輸出異常採用的方式是:System.out.println(e),而不是e.printStackTrace(),如果採用後面的方式輸出異常的話,就變成不是輸出異常,而是提示異常了,如下圖所示
2、num
,然後輸入字符,轉化爲Integer,如果拋出NumberFormatException
異常則顯示。這裏注意是實現的方式
3、注意:拋出異常之後,異常後面的部分不再執行。
2、jmu-Java-06異常-02-使用異常機制處理異常輸入 (50 分)
使用異常處理輸入機制,讓程序變得更健壯。
main方法:
- 輸入n,創建大小爲n的int數組。
- 輸入n個整數,放入數組。輸入時,有可能輸入的是非整型字符串,這時候需要輸出異常信息,然後重新輸入。
- 使用
Arrays.toString
輸出數組中的內容。
輸入樣例:
5
1
2
a
b
4
5
3
輸出樣例:
java.lang.NumberFormatException: For input string: "a"
java.lang.NumberFormatException: For input string: "b"
[1, 2, 4, 5, 3]
答案:
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int []a=new int[n];
String s;
for(int i=0;i<n;i++)
{
try
{
s=scan.next();
a[i]=Integer.valueOf(s);
}
catch(NumberFormatException e)
{
i-=1;
System.out.println(e);
//e.printStackTrace();
}
}
System.out.println(Arrays.toString(a));
}
}
解析:
1、注意:拋出異常之後,異常後面的部分不再執行。所以,如果在這後面寫length+=1的話,是不執行的。
這就是下面代碼錯誤的原因
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int []a=new int[n];
int length=0;
String s;
while(length<n)
{
try
{
s=scan.next();
a[length]=Integer.parseInt(s);
length+=1;
}
catch(NumberFormatException e)
{
length-=1;
System.out.println(e);
//e.printStackTrace();
}
}
System.out.println(Arrays.toString(a));
}
}