計算機17-1,2 異常
阿新 • • 發佈:2019-01-06
一、程式設計題
1、jmu-Java-06異常-01-常見異常 (50 分)
自己編碼以產生常見異常。
main方法:
-
事先定義好一個大小為5的陣列。
-
根據螢幕輸入產生相應異常
提示:可以使用System.out.println(e)
列印異常物件的資訊,其中e為捕獲到的異常物件。
輸入說明:
arr
代表產生訪問陣列是產生的異常。然後輸入下標,如果丟擲ArrayIndexOutOfBoundsException
異常則顯示,如果不丟擲異常則不顯示。null
,產生NullPointerException
cast
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));
}
}