Each of the tasks below shows one or more "bonehead" solutions (in Java), an explanation of why it's a stupid solution, and then a better solution. Study and learn, grasshopper. Don't be a bonehead.
Bonehead Solution: square = Math.pow(x,2);
What's wrong with it?
Similarly, Math.sqrt(x) is better than Math.pow(x, 0.5);
Bonehead Solution A:
switch (letter)Bonehead Solution B
{
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 18;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
default: return 0;
}
Similar to solution A except uses multiple IF statements.
What's wrong with it?
Better Solution
return (letter - 'A');
(Note: this only works for a character set like ASCII that
has consecutive characters).
Bonehead Solution A:
return (letter == '0') || (letter == '1') || (letter ==
'2')
|| (letter == '3') ||
(letter == '4') || (letter == '5') ||(letter
== '6') ||(letter == '7') ||
(letter == '8') ||(letter == '9') ;
Bonehead Solution B:
return (letter >= '0') && (letter <= '9');
What's wrong with it?
Better Solution
return Character.isDigit(letter);
Bonehead Solution
if (mystack.isEmpty() == true) dosomething;
What's wrong with it?
Better Solution
if (mystack.isEmpty()) dosomething;
Bonehead Solution
if (size > 0)
return true;
else
return false;
What's wrong with it?
return size > 0;
Bonehead Solution
private int[] scores = new int[10];
scores[0] = 5;
scores[1] = 3;
scores[2] = 7;
scores[3] = 8;
scores[4] = 2;
scores[5] = 3;
scores[5] = 5;
scores[7] = 6;
scores[8] = 9;
scores[9] = 3;
What's wrong with it?
private int[] scores = {5, 3, 7, 8, 2, 3, 5, 6, 9, 3};
Bonehead Solution
if (turn == 1) color = 1;
elseif (turn == 2) color = 2;
elseif (turn == 3) color = 3;
elseif (turn == 4) color = 4;
elseif (turn == 5) color = 5;
elseif (turn == 6) color = 6;
elseif (turn == 7) color = 7;
elseif (turn == 8) color = 8;
else color = 9;
What's wrong with it?
color = turn;
Bonehead Solution
public static int stringToInt(String input)
{
int result = 0;
int sLen = input.length();
for (int i = 0; i < sLen; i++)
{
result = 10 * result +
((int) (input.charAt(i))
- 48);
}
return result;
}
What's wrong with it?
Java already has a function to do this. This is a clear symptom of ignorance of the language. This is only one of many examples of this kind of boneheadedness. Others functions already available in Java for which ignorant programmers write their own code include:
Better Solution
result = Integer.parseInt(input);
Bonehead Solution
if (player ==1)
{
if (numberOfPlayers >= 2) player = 2;
else player = 1
}
else if (player == 2)
{
if (numberOfPlayers >= 3) player = 3;
else player = 1
}
.
.
. (repeats five more times!)
.
else if (player == 8)
{
if (numberOfPlayers >= 9) player = 9;
else player = 1
}
What's wrong with it?
Best Solution:
player = (player % numberOfPlayers) + 1;