Unknown user
Unknown user

Reputation: 45321

exceptions in java

I wrote a code which checks all kinds of conditions.

If it meets the condition it does what it is supposed to, otherwise I want it to throw an exception.

Is there any special syntax for that? Otherwise the compiler wants me to return any array, which I don't want to, due to the pre-condition.

Here is part of my code:

public static int [] code(int[]arr){
    if ((arr!=null)&&(chack4and5(arr))&&(arr[arr.length-1]!=4)&&(TwoFours(arr))){
        int k=0;
        for(int i = 0; i<=arr.length-1; i++){
            if (arr[i] == 4){
                int place= pos(arr,k);
                arr[place]=arr[i+1];
                arr[i+1]=5;
                k=k+3;  
            }
        }
        return arr;
    }
    else { 
        System.out.println("Please enter a legal array which matches the pre- conditions");
        }
}

}

Upvotes: 1

Views: 319

Answers (6)

P&#233;ter T&#246;r&#246;k
P&#233;ter T&#246;r&#246;k

Reputation: 116306

The way to throw an exception is

throw new IllegalArgumentException(
        "Please enter a legal array which matches the pre- conditions");

IllegalArgumentException is a Java runtime exception suitable for the current situation, but of course you can choose another one, or create and use your own type too. The only restriction is that it must be a subclass of java.lang.Exception.

I would rearrrange your code though to check the preconditions first, then proceed if everything's fine - I find this more readable:

if (arr == null || !chack4and5(arr) || arr[arr.length-1] == 4 || !TwoFours(arr)) {
  throw new IllegalArgumentException(
        "Please enter a legal array which matches the pre- conditions");
}
int k=0;

for(int i = 0; i<=arr.length-1; i++){
    if (arr[i] == 4){
        int place= pos(arr,k);
        arr[place]=arr[i+1];
        arr[i+1]=5;
        k=k+3;
    }
}
return arr;

(In fact, I would even prefer extracting the precondition check into a separate method - but I leave this to you.)

Upvotes: 9

MByD
MByD

Reputation: 137412

You can throw exception with this line

throw new SomeKindOfException("Exception description"); // or any other exception, also yours...

But you need to specify at the method declaration:

 public static int [] code(int[]arr) throws SomeKindOfException{

See Oracle tutorial for more

Upvotes: 1

Zach L
Zach L

Reputation: 16272

You may want to take a look at Oracle's tutorials on exceptions.

To throw an exception, you use the throw keyword.

To mark that a method may throw an exception, use the throws keyword, like

public static void foo() throws SomeException

Upvotes: 2

Wayne
Wayne

Reputation: 60424

If the exception is that something about your arguments is illegal, then throw an IllegalArgumentException:

throw new IllegalArgumentException("descriptive message")

Upvotes: 2

Bozho
Bozho

Reputation: 597362

throw new IllegalArgumentException(
   "Please enter a legal array which matches the pre- conditions")

java.langIllegalArgumentException is a RuntimeException that means some of the arguments are not as they are expected to be. Since it is an unchecked exceptions, your callers are not forced to handle it in any way (as opposed to checked exceptions)

Upvotes: 5

RoflcoptrException
RoflcoptrException

Reputation: 52247

You can throw an Exception by yourself. Maybe the best way to do this is defining a custom exception and then throwing it. If you don't want to do that use an IllegalArgumentException.

Here an example of a custom exception:

public static int [] code(int[]arr) {
        if ((arr!=null)&&(chack4and5(arr))&&(arr[arr.length-1]!=4)&&(TwoFours(arr))){
            int k=0;
            for(int i = 0; i<=arr.length-1; i++){
                if (arr[i] == 4){
                    int place= pos(arr,k);
                    arr[place]=arr[i+1];
                    arr[i+1]=5;
                    k=k+3;
                }
            }
            return arr;
        }
        else { 
           throw new MyException("No legal array");
        }
    }
}

And here your custom exception:

public class MyException extends Exception {
   public MyException(String message) {
      super(message);
   }
}

Upvotes: 3

Related Questions