1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Noob braucht Hilfe

  • SenorGonzales
  • 19. Januar 2007 um 14:05
  • Unerledigt
  • SenorGonzales
    2
    SenorGonzales
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 19. Januar 2007 um 14:05
    • #1

    Hallo zusammen,

    ich sitz schlepp jetzt schon seit ein paar Tagen diese Aufgabe mit, ich find einfach keine Lösung. Es geht um folgendes:

    Aufgabenstellung:

    Schreiben Sie eine Methode armstrong(n), die true zurückliefert, wenn die Ganzzahl n eine Armstrongzahl ist. Sonst wird false zurückgegeben.

    Und hier mein Code:

    Java
    import java.util.*;
    public class Uebung5_2 {
    
    static boolean armstrong (boolean erg, int t){ // Mir is klar, das hier was nicht stimmt, ich hab nur keine Ahnung, was...
    
    
    
        System.out.print("Die eingegebene Zahl ("+t);
    
        int h=0;                        //Hilfsvariable
    
        if (t==0){
            return erg=false;}
        else if (t<=10){
                String s = Integer.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                int v = s.charAt(0);
                v=v-47;
                h=v^1;
    
                if (t==h)
                    return erg = true;
                    else return erg=false;}
    
    
        else if (t>=10&&t<100){
                String s = Integer.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                int v = s.charAt(0);
                int w = s.charAt(1);
                v=v-48;
                w=w-48;
                h=v^2*w^2;
    
                if (t==h)
                    return erg = true;
                    else return erg=false;}
    
        else if (t>=100&&t<1000){
                 String s = Integer.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                   int v = s.charAt(0);
                   int w = s.charAt(1);
                   int x = s.charAt(2);
                   v=v-48;
                w=w-48;
                x=x-48;
                h=v^3*w^3*x^3;
    
                if (t==h)
                    return erg = true;
                    else return erg=false;}
    
        else if (t>=1000&&t<10000){
                String s = Integer.toString(t); 
                   int v = s.charAt(0);
                   int w = s.charAt(1);
                   int x = s.charAt(2);
                   int y = s.charAt(3);
                   v=v-48;                    
                   w=w-48;                    
                   x=x-48;                    
                   y=y-48;                    
                   h=v^4*w^4*x^4*y^4;
    
                   if (t==h)
                    return erg = true;
                    else return erg=false;}
    
    
    }
        public static void main(String[] args) {
            Scanner input = new Scanner (System.in);
            System.out.println("Bitte geben Sie eine Zahl ein, um zu prüfen, ob diese eine Armstrongzahl ist...");
            boolean erg=true;    //erg= true, damit erg initialisiert werden kann.
            int t = input.nextInt();
            armstrong(erg, t);
            if (erg==true)
            System.out.println(" ist Armstrong");
    
               else System.out.println("ist nicht Armstrong");
    
    
        }
    }
    Alles anzeigen

    So, das ganze funzt nicht, meine Frage is nun, wie ich es schaffen kann, eine Methode (armstrong(n), wobei n ja eine Ganzzahl sein soll) zu schreiben, die gleichzeitig aber einen boolean zurückgibt.

    Wie geht sowas?

    Falls die Frage hier fehl am Platz is, bitte ich das zu entschuldigen :wein:

    Ich verzweifel bald^^

  • T.dot
    5
    T.dot
    Mitglied
    Reaktionen
    6
    Punkte
    226
    Beiträge
    44
    • 19. Januar 2007 um 14:14
    • #2

    Du schreibst einfach bei deinen returns statt "return erg=false;" return false;

    Beim Aufruf schreibst du boolean erg = armstrong(t);

    Zum prüfen
    if(erg) { System.out.println("wahr"); } else { System.out.println("falsch"); }


    bzw. if(armstrong(t)) { System.out.println("wahr") ... usw.

    solltest dich mal mit Funktionen und Rückgabeparametern beschäftigen...

    Oppossom: Heavy Rock aus Nö

  • ecr
    3
    ecr
    Mitglied
    Reaktionen
    1
    Punkte
    51
    Beiträge
    10
    • 19. Januar 2007 um 15:31
    • #3

    '^' ist ein logischer Operator und nicht das was du benötigst.

    x^y (in Worten: x hoch y) würde in java entweder

    Code
    Math.pow(x,y)

    oder selbst implementiert etwa so

    Code
    int Basis = 2;
    int Exponent = 3;
    int Ergebnis = 1;
    for(int i = 0; i < Exponent; i++) {
        Ergebnis = Ergebnis * Basis; 
    } 
    //Ergebnis = 8

    aussehen.

    ausserdem für was sollten die einzelnen

    Code
    v=v-48...

    gut sein? :winking_face:

  • SenorGonzales
    2
    SenorGonzales
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 19. Januar 2007 um 15:40
    • #4

    Hmm, das mit den exp wusst ich zwar, aber ich bin ja nochnichmal so weit gekommen, das er das Rechnen angefangen hätte^^

    v=v-48 mach ich, weil ich in ner class vorher schonmal mit Armstrongzahlen gerechnet hatte, und er mit beim wandeln von Int zu String das ganze um 48 erhöht ausgegeben hat.

    Damals sah das so aus:

    Code
    public class Uebung4_3 {
    static String s;
    public static void main (String [] args){
    
        System.out.println("Programm zur Ermittlung der Armstrongzahlen zwischen 100 und 999");
        float t=100;                    //Testzahl mit Anfangswert 100, da das der geringste, 3-stellige Wert ist
        float h;                        //Hilfsvariable
    
        while (t<=999){
               t++;    
               String s = Float.toString(t);
               float x = s.charAt(0);
               float y = s.charAt(1);
               float z = s.charAt(2);    
               x=x-48;                    //Zahlenkorrektur
               y=y-48;                    //Zahlenkorrektur
               z=z-48;                    //Zahlenkorrektur
               h=x*x*x+y*y*y+z*z*z;
    
        if (t==h)
               System.out.println("Armstrongzahl "+h);
    
    
    
    }}}
    Alles anzeigen

    Ich glaub ich bau die Aufgabe nochmal neu auf :winking_face:

  • Vevusio
    6
    Vevusio
    Mitglied
    Reaktionen
    1
    Punkte
    371
    Beiträge
    71
    • 19. Januar 2007 um 15:44
    • #5

    das hat er drin weil eine ascii 0 gleich 48 ist, '1' ist als int 49 deswegen rechnet er überall -48, übrigens beim aller ersten if hast du -47 stehen ich denk das ist ein fehler

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • SenorGonzales
    2
    SenorGonzales
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 19. Januar 2007 um 17:43
    • #6

    So, ich hab das nochmal überarbeitet, aber er mosert immer noch in Zeile 4, das er "This method must return a result of typ boolean"

    Java
    import java.util.*;
    public class Uebung5_2 {
    
    public static boolean armstrong (double t){ // Mir is klar, das hier was nicht stimmt, ich hab nur keine Ahnung, was...
    
    
    
        System.out.print("Die eingegebene Zahl ("+t);
    
        double h=0;                        //Hilfsvariable
    
        if (t==0){
            return false;}
        else if (t<=10){
                String s = Double.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                double v = s.charAt(0);
                v=v-48;                            // Zahlenkorrektur
                h=Math.pow(v,v);
    
                if (t==h)
                    return  true;
                    else return false;}
    
    
        else if (t>=10&&t<100){
                String s = Double.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                double v = s.charAt(0);
                double w = s.charAt(1);
                v=v-48;                            // Zahlenkorrektur
                w=w-48;
                h=Math.pow(v,v)+Math.pow(w,w);
    
                if (t==h)
                    return true;
                    else return false;}
    
        else if (t>=100&&t<1000){
                 String s = Double.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                 double v = s.charAt(0);
                 double w = s.charAt(1);
                 double x = s.charAt(2);
                   v=v-48;                            // Zahlenkorrektur
                w=w-48;
                x=x-48;
                h=Math.pow(v,v)+Math.pow(w,w)+Math.pow(x, x);
    
                if (t==h)
                    return true;
                    else return false;}
    
        else if (t>=1000&&t<10000){
                String s = Double.toString(t); //Float wird zu String umgewandelt, um die einzelnen Zahlen zu erhalten.
                double v = s.charAt(0);
                double w = s.charAt(1);
                double x = s.charAt(2);
                double y = s.charAt(3);
                   v=v-48;                            // Zahlenkorrektur
                   w=w-48;                    
                   x=x-48;                    
                   y=y-48;                    
                   h=Math.pow(v,v)+Math.pow(w,w)+Math.pow(x, x)+Math.pow(y, y);
    
                   if (t==h)
                    return true;
                    else return false;}
    
    
    }
        public static void main(String[] args) {
    
            Scanner input = new Scanner (System.in);
            System.out.println("Bitte geben Sie eine Zahl ein, um zu prüfen, ob diese eine Armstrongzahl ist...");
            double t = input.nextDouble();
    
            if (armstrong(t)){
            System.out.println(" ist eine Armstrongzahl");}
    
               else System.out.println("ist keine Armstrongzahl");
    
    
        }
    }
    Alles anzeigen

    Was mach ich da falsch?

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 19. Januar 2007 um 17:59
    • #7

    Theoretisch ist es möglich, dass keine der if-Bedingungen betreten wird. Somit würde auch die Methode keinen Wert zurück geben. Was du machen kannst ist deinen if/else-if-Blöcken ein else anzhängen. Falls es keinen "sonst"-Fall gibt, dann kannst du einfach die letzte Bedingungen statt "else-if" als "if" lösen. Sollte ein weiterer Fall aber auf keinen Fall möglich sein könntest du einfach am Ende der Methode eine Exception werfen - die würfe nur geworfen werden falls der Fall auftaucht der nicht es nie sollte.

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 19. Januar 2007 um 18:05
    • #8

    I weiß, meckern kann man immer leicht und viel, aber wenn n eine Ganzzahl sein soll, wieso arbeitet man dann mit Gleitkommazahlen?

    LG

  • SenorGonzales
    2
    SenorGonzales
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 19. Januar 2007 um 18:07
    • #9

    Werd ich natürlich ändern, aber alles zu seiner Zeit^^

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 19. Januar 2007 um 18:07
    • #10

    [EDIT]john foo war bei weitem schneller...[/EDIT]
    nach kurzem hinschaun schauts so aus, als ob du nicht garantieren wuerdest, dass du auch einen boolean zurueck gibst. (genau das sagt ja auch die fehlermeldung). stell dir vor du kommst immer ins "else" und das letzte "else if" geht auch nicht auf. dann lieferst du keinen boolean zurueck.

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung