Приложение 1. Програма за изчисляване на средна стойност.
Вариант 1: методът average() не “улавя” изключения от вида NumberFormatException, хвърлени от метода parseDouble() и затова при грешка във формата на въвежданите числа програмата не завършва.
import java.io.*;
import java.util.*;
class EssentialMath{
public static double average() throws IOException{
System.out.println("Enter numbers at the same line");
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
String s=b.readLine();
StringTokenizer st=new StringTokenizer(s);
double sum=0;
int numberOfValues =0;
while(st.hasMoreTokens()){
String n=st.nextToken();
double num=Double.parseDouble(n);
sum +=num;
numberOfValues++;
}
double average=sum/numberOfValues;
return average;
}
}
public class FindAverage {
public static void main(String[] args)throws IOException {
double avg=EssentialMath.average();
System.out.println("The average value is: "+avg);
}
}
Вариант 2. Модифициран метод average(), който “улавя” изключения от вида NumberFormatException, хвърлени от метода parseDouble(). Това позволява числата с грешен формат да се пренебрегнат и да се изведе информация къде са грешните числа.
public static double average() throws IOException{
System.out.println("Enter numbers at the same line");
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
String s=b.readLine();
StringTokenizer st=new StringTokenizer(s);
double sum=0;
int numberOfValues =0;
int numberOfErrors=0;
while(st.hasMoreTokens()){
String n=st.nextToken();
try{
double num=Double.parseDouble(n);
sum +=num;
numberOfValues++;
}catch(NumberFormatException e){
numberOfErrors++;
System.out.println("Invalid number at position "+
(numberOfValues+numberOfErrors)+" ignored.");
} }
double average=sum/numberOfValues;
return average;
}
Приложение 3. Дели числата в един масив с едно нормиращо число и улавя и обработва изключение от тип ArithmeticException когато се дели на нула.
import java.util.*;
public class ThrowDemo {
public static void main(String[] args) {
double data[] = { 1.2, 2.3, 3.4, 4.5 };
Scanner s=new Scanner(System.in);
System.out.println("Enter a scaling number");
double d=s.nextDouble();
try {
scaleArray(data, d);
printArray(data);
} catch(ArithmeticException ae) {
System.out.println("Opa, divide by zero");
}
}
public static void scaleArray(double[] array, double d){
if ( d == 0.0 ) throw new ArithmeticException();
for(int i=0; iarray[i] /= d;
}
}
public static void printArray(double array[]) {
for(int i=0; i
System.out.println("array[" + i +
"] = " + array[i]);
}
System.out.println();
}
}
Приложение 4. Запълва и изпразва стек и дава съобщения ако стека е пълен или празен.
class StackFullException extends Exception{
int size;
//constructor
StackFullException(int s){size=s;}
public String toString(){//method
return "\nStack is full. Maximum size is "+size;
}
}
class StackEmptyException extends Exception{
public String toString(){
return "\nStack is empty!!!";
}
}
class Stack{
private char stk[];// array containing the stack
private int tos;//top of stack
Stack(int size){//constructor defining size
stk=new char[size];
tos=0;
}
Stack(char a[]){//constructor defining values from array
stk=new char [a.length];
for(int i=0;i
try{
push(a[i]);
}
catch(StackFullException exc){
System.out.println(exc);}
}
}
void push(char ch)throws StackFullException {//method to add character to stack
if(tos==stk.length)
throw new StackFullException(stk.length);
stk[tos]=ch;
tos++;
}
char pop()throws StackEmptyException{//method to take character from stack
if(tos==0)
throw new StackEmptyException();
tos--;
return stk[tos];
}
void showStack()throws StackEmptyException{//show stack method
for(int i=0;i
char ch=pop();
System.out.print(ch);
}
System.out.println();
}
}
class StackDemo {
public static void main (String[] args)throws Exception{
Stack stk1=new Stack(10);
char name[]={'S','o','f','i','a'};
Stack stk2=new Stack(name);//fill stk2 by array
//fill stk1
for(int i=0;i<10;i++)
stk1.push((char)('A'+i));
//show stack by loop
stk1.showStack();
stk2.showStack();
//stk2.showStack();
}
}
Приложение 5. Същото като приложение 4, но грешките при излизане от границите на стека се обработват от изключения, които не са вградени в Java.
class Stack{
private char stk[];// array containing the stack
private int tos;//top of stack
Stack(int size){//constructor defining size
stk=new char[size];
tos=0;
}
Stack(char a[]){//constructor defining values from array
stk=new char [a.length];
for(int i=0;i
push(a[i]);
}
void push(char ch) {//method to add character to stack
if(tos==stk.length){
System.out.println("Stack is full.");
return;
}
stk[tos]=ch;
tos++;
}
char pop(){//method to take character from stack
if(tos==0){
System.out.println("Stack is empty.");
return (char)0;
}
tos--;
return stk[tos];
}
void showStack(){//show stack method
for(int i=0;i
char ch=pop();
System.out.print(ch);
}
System.out.println();
}
}
class StackDemo {
public static void main (String[] args)throws Exception{
Stack stk1=new Stack(10);
char name[]={'S','o','f','i','a'};
Stack stk2=new Stack(name);//fill stk2 by array
//fill stk1 by loop
for(int i=0;i<10;i++)
stk1.push((char)('A'+i));
//show stack by loop
stk1.showStack();
stk2.showStack();
//stk2.showStack();
}
}
Сподели с приятели: |