Veröffentlicht 18. Oktober 200519 j Hallo Kann mir jemand helfen uns zwar soll ich die Quersumme einer Zahl berechnen. allerdings ihne Schleifenanweisung. Weis jemand wie das geht? Ich habem mit Java fast keine Erfahrung bin also mit meinem Latein am ende gruß Unimx
18. Oktober 200519 j Also mal ganz faul aus google das erste ergebnis: public class Quersumme { public static void main(String[] args) { int zahl = 155; System.out.println("Quersumme = " + quersumme(zahl)); } public static int quersumme(int zahl) { if (zahl <= 9) return zahl; return zahl%10 + quersumme(zahl/10); } } rechnet dir die quersumme der zahl aus quersumme von 155 in diesem fall = 11 mfg Eth
18. Oktober 200519 j Ich weis nicht ob es eine Methode gibt die dir aus einer Zahl die Quersumme bildet. Ich würde die Zahl in ihre einzelteile Zerlegen und dann einfach aufaddieren. Also die Zahl 123 in 1 2 3 zerlegen mit split dann in einen int Wert umwandeln und berechnen also 1+2+3 = 6. Vielleicht kannst du ja auch mal deinen Ansatz posten damit wir uns dem mal anschauen können.
18. Oktober 200519 j Danke wir haben es viel einfach bzw halt nur auf eine Zahl bezogen gemacht -------------------------- public class Quersumme { public static void main(String argv[]) { int z = 123; int h,ze,e,qs ; h = z/100; //1 z = z%100; //23 ze = z/10; //2 e = z%10; //3 qs = h + ze + e; System.out.println(qs); } } ------------------ Die Lösung sieht aber gut aus. Danke gruß Unimx
18. Oktober 200519 j Das ist das Problem. Euer Lösung funktioniert nur für dreistellige Zahlen. Das ist aber nicht so geschickt. Ich finde Lösung eins aus google recht schick! Peter
18. Oktober 200519 j Eine weitere mögliche Lösung: public static int quersumme(int value) { int result = 0; for(char valueDigit : String.valueOf(value).toCharArray()) { result += Character.digit(valueDigit, 10); } return result; }
18. Oktober 200519 j Eine weitere mögliche Lösung: public static int quersumme(int value) { int result = 0; for(char valueDigit : String.valueOf(value).toCharArray()) { result += Character.digit(valueDigit, 10); } return result; } Wobei das natürlich nur ab Java 5 funktioniert und nicht gerade geeignet für Algorithmentheorie ist. Das erste Beispiel ist schon OK, aber nicht in einer Schleife. Um meiner Faulheit gerecht zu werden und didaktisch geschickt vorzugehen, hier nur ein Ansatz: Prüfe ob die Zahl mehr als 1 Stelle hat Mittels modulo eine Zahl "abspalten" und zur Gesamtsumme hinzufügen Wiederhole bis nur noch 1 Stelle übrig Tip: Modulo
18. Oktober 200519 j public static int getQuersumme(int i){ //ich liebe diesen Deutsch-Englisch-Mix String zahl = ""+i; int erg = 0; for(int a = 0; a < i.length(); a++){ erg = erg + Integer.parseInt(""+charAt(a)); } return erg }
18. Oktober 200519 j also das ihne kann man nun eber echt auch als "in ner" oder "inne" werten. Aber gut wenn es "ohne" heißen soll! Sry!
19. Oktober 200519 j ja mir ist bewusst das es eine seeeehr schlechte Lösung ist aber genau so wollt es unser Lehrer haben. Sagen wirs mal so ich glaub ich darf mir Java selber beibringen ich hab das gefühl der hat keine ahnung wie er sowas rüberbringen soll. cya Unimx
19. Oktober 200519 j Wobei das natürlich nur ab Java 5 funktioniert1.5/5.0 ist jetzt seit fast einem Jahr auf dem Markt, und ich setze es daher als vorhanden voraus. Es programmiert auch niemand mehr für die Windows 3.1 API *g*. und nicht gerade geeignet für Algorithmentheorie ist.Eine performante Lösung gehörte nicht zur Aufgabenstellung *g*. Stand da oben nicht was von OHNE schleifenkonstrukt?Das ist das Problem, wenn der OP sich nicht die Zeit für eine korrekte Rechtschreibung nimmt. Dann sind Eigeninterpretationen Tür und Tor geöffnet. Ich habe es als "inne" also als "in einer" Schleife gelesen. Aber rekursiv geht's natürlich auch. Wiederrum basiert auf Character Operationen, aber damit kommt, wie ich finde, der Ablauf recht schön zum Ausdruck: public static int quersumme(int value) { if(value == 0) { return 0; } else { String valueString = String.valueOf(value); int firstDigitValue = Character.digit(valueString.charAt(0), 10); String restString = valueString.length() > 1 ? valueString.substring(1) : null; if(restString == null) { return firstDigitValue; } else { return firstDigitValue + quersumme(Integer.parseInt(restString)); } } }
19. Oktober 200519 j 1.5/5.0 ist jetzt seit fast einem Jahr auf dem Markt, und ich setze es daher als vorhanden voraus. Es programmiert auch niemand mehr für die Windows 3.1 API *g*. Das hab' ich mir schon gedacht. Ich wollte nur allgemein darauf hinweisen. Nicht das wieder kommt: 'Läuft bei mir nicht'. Eine performante Lösung gehörte nicht zur Aufgabenstellung *g*. *g* So meinte ich das ja auch nicht. Ich meinte eher so die Richtung 'pädagogisch wertvoll'. Jeder der ernsthaft programmieren will, sollte die grundlegenden Algorithmen mal gesehen haben Das ist das Problem, wenn der OP sich nicht die Zeit für eine korrekte Rechtschreibung nimmt. Dann sind Eigeninterpretationen Tür und Tor geöffnet. Ich habe es als "inne" also als "in einer" Schleife gelesen. *allgemeine Verwirrung* Das Zitat stammt nicht von mir. Du weißt schon, daß Dein erster Code rekursiv war? Du dachtest OHNE und ich verstand IN EINER Schleife. Aber iss ja auch egal jetzt
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.