The dangling else ambiguity explained....


   double shippingCharge;

   shippingCharge = 5.00;
   if ( country.equals("USA") )
      if ( state.equals("HI") )
         shippingCharge = 10.00;   // Shipping to Hawaii is $10
   else
      shippingCharge = 20.00;      // Shipping to outside USA is $20   

Can be read as:


   double shippingCharge;

   shippingCharge = 5.00;
   if ( country.equals("USA") )
      if ( state.equals("HI") )
         shippingCharge = 10.00;   
   else
      shippingCharge = 20.00;

   double shippingCharge;

   shippingCharge = 5.00;
   if ( country.equals("USA") )
      if ( state.equals("HI") )
         shippingCharge = 10.00;   
   else
      shippingCharge = 20.00;

Or after indenting it properly:


   double shippingCharge;

   shippingCharge = 5.00;
   if ( country.equals("USA") )
      if ( state.equals("HI") )
         shippingCharge = 10.00;   
   else
      shippingCharge = 20.00;

   double shippingCharge;

   shippingCharge = 5.00;
   if ( country.equals("USA") )
      if ( state.equals("HI") )
         shippingCharge = 10.00;   
      else
         shippingCharge = 20.00;