Showing posts with label run-time error. Show all posts
Showing posts with label run-time error. Show all posts

Wednesday, 14 January 2015

Division by Zero in Java

Java does not stop you dividing by zero but, if you try, it gives you a run-time error:
 
Java > cat prog81.java
public class prog81
{
public static void main (String args[])
  {
  int x = 1/0;
  System.out.println("x = " + x);
  }
}
Java > javac prog81.java
Java > java prog81
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at prog81.main(prog81.java:5)
Java >
 
You can trap these errors and handle them tidily as shown below. This stops your program falling over:
 
Java > cat prog82.java
public class prog82
{
public static void main (String args[])
  {
  try
    {
    System.out.println("Dividing 1 by 0");
    int x = 1/0;
    System.out.println("x = " + x);
    }
  catch (ArithmeticException e)
    {
    System.out.println("Division by zero not allowed");
    }
  try
    {
    System.out.println("Dividing 1 by 1");
    int y = 1/1;
    System.out.println("y = " + y);
    }
  catch (ArithmeticException e)
    {
    System.out.println("Division by zero not allowed");
    }
  }
}
Java > javac prog82.java
Java > java prog82
Dividing 1 by 0
Division by zero not allowed
Dividing 1 by 1
y = 1
Java >
 
However, if you divide 1.0 by 0.0, the answer is infinity:
 
Java > cat prog83.java
public class prog83
{
public static void main (String args[])
  {
  double x = 1.0/0.0;
  System.out.println("x = " + x);
  }
}
Java > javac prog83.java
Java > java prog83
x = Infinity
Java >

... and, if you divide 0.0 by 0.0, the answer is NaN (not a number):

andrew@UBUNTU:~/Java$ cat prog84.java
public class prog84
{
public static void main (String args[])
  {
  double x = 0.0/0.0;
  System.out.println("x = " + x);
  }
}
andrew@UBUNTU:~/Java$ javac prog84.java
andrew@UBUNTU:~/Java$ java prog84
x = NaN
andrew@UBUNTU:~/Java$

Friday, 26 December 2014

Joining Java Conditional Statements With & And &&

Program prog53 below checks whether string my_name is more than 6 characters long. If so, it then looks to see if the seventh character is an X. The two conditional statements are joined by && so the second test is only carried out if the first is true:

andrew@UBUNTU:~/Java$ cat prog53.java
public class prog53
{
public static void main (String args[])
  {
  String my_name = "Andrew";
  if ((my_name.length() > 6)
  &&  (my_name.charAt(6) == 'X'))
    System.out.println ("7th character = X");
  else
    System.out.println ("7th character not = X");
  }
}
andrew@UBUNTU:~/Java$ javac prog53.java
andrew@UBUNTU:~/Java$ java prog53
7th character not = X
andrew@UBUNTU:~/Java$


Program prog54 does the tests in the wrong order and produces a run-time error:

andrew@UBUNTU:~/Java$ cat prog54.java
public class prog54
{
public static void main (String args[])
  {
  String my_name = "Andrew";
  if ((my_name.charAt(6) == 'X')
  &&  (my_name.length() > 6))
    System.out.println ("7th character = X");
  else
    System.out.println ("7th character not = X");
  }
}
andrew@UBUNTU:~/Java$ javac prog54.java
andrew@UBUNTU:~/Java$ java prog54
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    at java.lang.String.charAt(String.java:694)
    at prog54.main(prog54.java:6)
andrew@UBUNTU:~/Java$


Program prog55 is similar to prog53 but joins the two conditional statements with & (a single ampersand). This evaluates the 2nd conditional statement even if the first is false so it also produces a run-time error:

andrew@UBUNTU:~/Java$ cat prog55.java
public class prog55
{
public static void main (String args[])
  {
  String my_name = "Andrew";
  if ((my_name.length() > 6)
   &  (my_name.charAt(6) == 'X'))
    System.out.println ("7th character = X");
  else
    System.out.println ("7th character not = X");
  }
}
andrew@UBUNTU:~/Java$ javac prog55.java
andrew@UBUNTU:~/Java$ java prog55
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    at java.lang.String.charAt(String.java:694)
    at prog55.main(prog55.java:6)
andrew@UBUNTU:~/Java$