I am trying to learn some Java on my own, and I am tackling some "programming challenge" problems to practice the little I have learnt so far.
Could anybody constructively critique this beginner's effort (source on Bitbucket)?
public class BinaryCode {
public String[] decode(String message) {
int messageLength = message.length();
return new String[] { decodeMessage(message, messageLength, 0),
decodeMessage(message, messageLength, 1) };
}
private String decodeMessage(String encodedMessage, int messageLength,
int assumedFirstDigit) {
StringBuilder decodedMessage = new StringBuilder(messageLength);
int nextDecodedDigit = assumedFirstDigit;
for (int i = 0; i < messageLength; i++) {
if (nextDecodedDigit != 0 && nextDecodedDigit != 1) {
return "NONE";
}
decodedMessage.append(nextDecodedDigit);
int encodedDigit = encodedMessage.charAt(i) - '0';
int decodedDigit = decodedMessage.charAt(i) - '0';
nextDecodedDigit = encodedDigit - decodedDigit;
if (i > 0) {
nextDecodedDigit -= decodedMessage.charAt(i - 1) - '0';
}
}
int checkValue = decodedMessage.charAt(messageLength - 1) - '0';
if (messageLength > 1) {
checkValue += decodedMessage.charAt(messageLength - 2) - '0';
}
if (checkValue == encodedMessage.charAt(messageLength - 1) - '0') {
return decodedMessage.toString();
}
return "NONE";
}
}