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