標題:
例外處理 (三)
[打印本頁]
作者:
tonyh
時間:
2015-1-10 17:30
標題:
例外處理 (三)
本帖最後由 tonyh 於 2015-1-10 18:10 編輯
利用 try...catch 語法捕捉例外, 針對不同的例外做出不同的回應, 並只允許使用者至多三次的錯誤嘗試.
[attach]1119[/attach]
import java.util.*;
public class ch52
{
public static void main(String args[])
{
for(int i=1; i<=3; i++)
{
try
{
Scanner s=new Scanner(System.in);
int a, b;
System.out.print("請輸入分子: ");
a=s.nextInt();
System.out.print("請輸入分母: ");
b=s.nextInt();
System.out.println(a+"/"+b+"="+(a/b));
return;
}
catch(ArithmeticException e)
{
System.out.println("運算錯誤! 分母不可為零!");
}
catch(InputMismatchException e)
{
System.out.println("格式錯誤! 輸入須為整數!");
}
if(i==3)
System.out.println("錯誤嘗試過多! 程式跳出!");
System.out.println();
}
}
}
複製代碼
作者:
劉得恩
時間:
2015-1-10 17:53
import java.util.*;
public class ch52
{
public static void main(String[] args)
{
int x,y;
for(int i=1;i<=3;i++)
{
try
{
Scanner s=new Scanner(System.in);
System.out.print("輸入分子: ");
x=s.nextInt();
System.out.print("輸入分母:");
y=s.nextInt();
System.out.print(x+"/"+y+"="+(x/y));
return;
}
catch(InputMismatchException e)
{
System.out.println("格式錯誤!");
}
catch(ArithmeticException e)
{
System.out.println("運算錯誤!");
}
if(i==3)
System.out.println("程式跳出");
}
}
}
複製代碼
作者:
林宇翔
時間:
2015-1-10 17:56
import java.util.*;
public class ch52
{
public static void main(String[] args)
{
int x,y;
for(int i=1;i<=3;i++)
{
try
{
Scanner s=new Scanner(System.in);
System.out.print("輸入分子: ");
x=s.nextInt();
System.out.print("輸入分母:");
y=s.nextInt();
System.out.print(x+"/"+y+"="+(x/y));
return;
}
catch(InputMismatchException e)
{
System.out.println("格式錯誤!");
}
catch(ArithmeticException e)
{
System.out.println("運算錯誤!");
}
if(i==3)
System.out.println("程式跳出");
}
}
}
複製代碼
作者:
張彥承
時間:
2015-1-10 17:56
import java.util.*;
public class ch52
{
public static void main(String[] args)
{
int x,y;
for(int i=1;i<=3;i++)
{
try
{
Scanner s=new Scanner(System.in);
System.out.print("輸入分子: ");
x=s.nextInt();
System.out.print("輸入分母:");
y=s.nextInt();
System.out.print(x+"/"+y+"="+(x/y));
return;
}
catch(InputMismatchException e)
{
System.out.println("格式錯誤!");
}
catch(ArithmeticException e)
{
System.out.println("運算錯誤!");
}
if(i==3)
System.out.println("錯誤過多!程式跳出");
}
}
}
複製代碼
作者:
劉得恩
時間:
2015-1-10 17:57
#include <iostream>
#include"point.h"
#include <exception>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct ooops : std::exception {
const char* what() const throw() {return "Ooops!\n";}
};
void print(exception& ex)
{
cout<<ex.what();
}
int main() {
ooops e;
std::exception* p = &e;
cout<<p->what();
try
{
print(*p);
throw *p;
}
catch(exception& ex)
{
cout<<ex.what();
}
}
複製代碼
作者:
周雍程
時間:
2015-1-10 17:57
import java.util.Scanner;
public class ch51
{
public static void main(String args[])
{
try
{
Scanner s=new Scanner(System.in);
int a,b;
System.out.print("請輸入分子: ");
a=s.nextInt();
System.out.print("請輸入分母: ");
b=s.nextInt();
System.out.println(a+"/"+b+"="+(a/b));
return;
}
catch(java.lang.ArithmeicException e)
{
System.out.println("運算出現錯誤");
}
catch(java.util.InputMismatchException e)
{
System.out.println("程式出現錯誤");
}
if(i==3)
System.out.println("錯誤過多,程式跳出");
}
}
複製代碼
作者:
張峻瑋
時間:
2015-1-10 18:00
import java.util.Scanner;
public class ch51
{
public static void main(String args[])
{
for(int i=1;i<=3;i++)
{
try
{
Scanner s=new Scanner(System.in);
int a,b;
System.out.print("請輸入分子: ");
a=s.nextInt();
System.out.print("請輸入分母: ");
b=s.nextInt();
System.out.print(a+"/"+b+"="+a/b);
}
catch(java.lang.ArithmeticException e)
{
System.out.println("運算錯誤!分母不可為零!");
}
catch(java.util.InputMismatchException e)
{
System.out.println("格式錯誤!輸入需為整數!");
}
if(i==3)
System.out.println("錯誤嘗試過多!程式跳出!");
}
}
}
複製代碼
作者:
李允軒
時間:
2015-1-14 18:02
import java.util.*;
public class ch52
{
public static void main(String args[])
{
for(int i=1; i<=3; i++)
{
try
{
Scanner s=new Scanner(System.in);
int a, b;
System.out.print("請輸入分子: ");
a=s.nextInt();
System.out.print("請輸入分母: ");
b=s.nextInt();
System.out.println(a+"/"+b+"="+(a/b));
return;
}
catch(ArithmeticException e)
{
System.out.println("運算錯誤! 分母不可為零!");
}
catch(InputMismatchException e)
{
System.out.println("格式錯誤! 輸入須為整數!");
}
if(i==3)
System.out.println("錯誤嘗試過多! 程式跳出!");
System.out.println();
}
}
}
複製代碼
作者:
張郁庭
時間:
2015-1-16 20:55
import java.util.*;
public class ch52
{
public static void main(String args[])
{
for(int i=1; i<=3; i++)
{
try
{
Scanner s=new Scanner(System.in);
int a, b;
System.out.print("請輸入分子: ");
a=s.nextInt();
System.out.print("請輸入分母: ");
b=s.nextInt();
System.out.println(a+"/"+b+"="+(a/b));
return;
}
catch(ArithmeticException e)
{
System.out.println("運算錯誤! 分母不可為零!");
}
catch(InputMismatchException e)
{
System.out.println("格式錯誤! 輸入須為整數!");
}
if(i==3)
System.out.println("錯誤嘗試過多! 程式跳出!");
System.out.println();
}
}
}
複製代碼
作者:
tonyh
時間:
2015-1-17 09:45
回復
5#
劉得恩
#include<iostream>
#include<exception>
using namespace std;
struct ooops : std::exception //定義一個結構繼承std的exception(標準的例外處理類)
{
const char* what() const throw() {return "Ooops!\n";} //定義一個回傳 “Ooops”的函式來覆寫std的exception的what方法
};
void print(exception &ex) //定義一個函示接收exception類的物件的位址傳入
{
cout<<ex.what(); //並輸出該物件的what方法
}
int main()
{
ooops e; //宣告一個e(屬於ooops類)
//宣告一個p指標(屬於exception類)指向e的位置(父類指標指向子類物件位置是可以的,因為子類可以casting成為父類)
std::exception* p = &e;
cout<<p->what(); //呼叫p的what方法,會輸出Ooops!\n,因為物件導向的 “多型”
try
{
print(*p); //透過print函式呼叫p的what方法,會輸出Ooops!\n,因為物件導向的 “多型”
throw *p; //丟出例外
}
catch(exception &ex) //捕捉例外,這時候捕捉到的是exception標準例外
{
cout<<ex.what(); //輸出std::exception,標準exception的what()方法的輸出
}
//建議加上下面的程式:
try
{
throw e; //丟出例外
}
catch(ooops &ex) //捕捉例外,這時候捕捉到的是ooops自定義的例外
{
cout<<ex.what(); //輸出Ooops!\n,自己寫的ooops的what()方法的輸出
}
//可以用來示範丟出ooops例外的結果
system("pause");
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2