Java :: Aufgabe #3 :: Lösung #4
22 Lösungen
#3
Quersumme berechnen und ausgeben
Anfänger - Java
von Gustl
- 12.08.2012 um 14:49 Uhr
Schreiben sie ein Konsolenprogramm, das eine
ihre Quersumme berechnet und das Ergebnis wie folgt ausgibt:
int-zahl > 0 und < 10000 einliest, ihre Quersumme berechnet und das Ergebnis wie folgt ausgibt:
Konsolenausgabe:
Zahl eingeben (0-10000): 3698
Quersumme: 3 + 6 + 9 + 8 = 26
#4
von tumble (20 Punkte)
- 06.10.2012 um 14:22 Uhr
Kern der Lösung ist die calculateChecksum-Methode. Der Rest ist nur glue code, um die eng gesteckten Anforderungen der Aufgabe zu erfüllen. Zugegeben, die Methode nimmt direkt einen String, keinen int, aber die Adapter-Methode spare ich mir einfach mal. Der Einzeiler dafür ist banal.
Java-Code
/**
* Calculates the checksum for the number given as {@link String}.
*
* @param value
* String representation of a number for which you want the
* checksum to be calculated
* @return the checksum of the specified number
* @throws IllegalArgumentException
* if you pass an empty {@link String}, null or a "dirty" String
* (only numbers and a leading minus are allowed)
*/
static int calculateChecksum(String value) {
if (value == null || value.isEmpty()) {
throw new IllegalArgumentException("No empty input or null as argument allowed");
}
// Removing potentially leading minus sign from input string
final boolean isNegative = value.startsWith("-") ? true : false;
if (isNegative) {
value = value.substring(1, value.length());
}
// Validating and splitting input string into single digits
int[] digits = new int[value.length()];
for (int i = 0; i < digits.length; i++) {
if (!Character.isDigit(value.charAt(i))) {
throw new IllegalArgumentException("Input value must not contain any characters but digits");
}
digits[i] = Character.getNumericValue(value.charAt(i));
}
int result = 0;
// Actual checksum calculation
for (int i = 0; i < digits.length; i++) {
result += digits[i];
}
// Bringing back the minus according as input string was negative
return isNegative ? -1 * result : result;
}
/**
* This is just glue code to fit the task's requirement.
*
* @param input
*/
private static void evaluateInput(String input) {
int valueOfInput = 0;
try {
valueOfInput = Integer.valueOf(input);
} catch (NumberFormatException e) {
// tolerating wrong input here yet, checksum method will handle it
System.out.println("Your input was not a number, this will not end well...");
}
if (valueOfInput < 0 || valueOfInput > 10000) {
System.out.println("Your input was outside the allowed range, but I am smart enough anyway. Result is being calculated.");
}
StringBuilder builder = new StringBuilder();
builder.append("Checksum: ");
final boolean isNegative = input.charAt(0) == '-';
final char[] inputAsCharArray = input.toCharArray();
for (int i = isNegative ? 1 : 0; i < inputAsCharArray.length; i++) {
if (isNegative) {
builder.append("-");
}
builder.append(inputAsCharArray[i]);
builder.append(" + ");
}
builder.replace(builder.length() - 2, builder.length(), "= ");
builder.append(Checksum.calculateChecksum(input));
System.out.println(builder.toString());
}
public static void main(String[] args) {
System.out.print("Enter a number (0-10000):");
try (Scanner input = new Scanner(System.in)) {
Checksum.evaluateInput(input.nextLine().trim());
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
