Programming problem at
http://codingbat.com/prob/p116624
Given an int n, return the absolute difference between n and 21, except return double the absolute difference if n is over 21. 
diff21(19) → 2
diff21(10) → 11
diff21(21) → 0 
My Solution
First i wrote
public int diff21(int n) {
  int absDiff = java.Math.abs(n-21);
  if(n>21)
  absDiff =  2*absDiff;
  return absDiff;
} 
It gave error that java.Math cannot be resolved to a type. Then i realized i should not use java build in packages
Then i modified correct the code as
public int diff21(int n) {
  int absDiff = n-21;
  if (absDiff < 0 )
  absDiff = (-1)*absDiff;
  if(n>21)
  absDiff =  2*absDiff;
  return absDiff;
} 
After i read the coding rules ( see Comparison and Lessons below ) , i realized that packages are allowed to be imported
However my mistake was different , i wrote wrong java class package.
The revised correct code with build in function of abs is
public int diff21(int n) {
  int absDiff = java.lang.Math.abs(n-21);
  if(n>21)
  absDiff =  2*absDiff;
  return absDiff;
} 
The official solution was
public int diff21(int n) {
  if (n <= 21) {
    return 21 - n;
  } else {
    return (n - 21) * 2;
  }
}Comparison and Lessons
I read the coding rules for CodingBat website (http://codingbat.com/help.html)  The java.util package is included in all the problems
My second mistake was to use the wrong java.lang.Math package ( i used java.Math )
Other thing which i noticed specific to CodingBat is below
If the method takes a String or array argument, those arguments will not be passed in a null. However, the empty String or array is still a valid case unless the problem statement specifically says otherwise.
Lessons learnt to remember the java Math class package
 
 
No comments:
Post a Comment
Please share your views and comments below.
Thank You.