1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Fehler gesucht - Codeblindheit oder Blödheit :S

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von 2Stoned, 15.03.2010.

  1. 2Stoned, 15.03.2010 #1
    2Stoned

    2Stoned Threadstarter Erfahrener Benutzer

    Beiträge:
    158
    Erhaltene Danke:
    13
    Registriert seit:
    23.05.2009
    Phone:
    HTC Desire HD
    Grüäzi Wohl
    Vielleicht kann mir jemand kurzerhand auf die Sprünge helfen.
    Ich wollte ein kleines App schreiben, welches die Collatz-Folgen der Zahlen 1-100 durchgeht, und anschliessend ausgibt, bei welcher Zahl die grösste Endsumme erreicht wird, und wie gross denn diese Summe ist.
    Eine kleine Zeitmessung werde ich auch noch einbauen, evtl. dient es dann als "Benchmark".

    Nun, hier der Code:

    collatz.java
    Code:
    package com.collatz.bench;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import android.widget.Toast;
    
    public class collatz extends Activity {
        /** Called when the activity is first created. */
    	Bench test = new Bench();
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            final ImageButton button = (ImageButton) findViewById(R.id.android_button);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    // Perform action on clicks
                	
                	Toast.makeText(collatz.this, "Das höchste Collatz-Ergebnis erreicht man mit der Zahl " +com.collatz.bench.Bench.counterMAX, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
    
    Bench.java
    Code:
    package com.collatz.bench;
    
    public class Bench {
    
    	int betrag = 0;
    	static int maxbetrag = 0;
    	int counter = 0;
    	static int counterMAX = 0;
    	int wert = 0;
    	int n = 0;
    	
    
    	
    	public Bench () {
    		while (counter < 100){
    			n = counter;
    			betrag = 0;
    		while (n > 1) {
    			if ( n %2==0) {
    				betrag = betrag + n;
    				if ( betrag > maxbetrag ){ maxbetrag = betrag; counterMAX = counter;}
    				n = n/2;
    			}
    			else {
    				betrag = betrag + n;
    				if ( betrag > maxbetrag ){ maxbetrag = betrag; counterMAX = counter;}}
    				n = 3*n+1; 
    				}
    		counter++;
    				}
    			}
    	}
    }
    
    Die App läuft in so fern, dass eine Ausgabe mit dem Wert "0" erfolgt, nur wird nie was gerechnet.
    Ich denke, oder hoffe, dass mir wohl nur noch eine Zeile fehlt, da ich irgend etwas partout übersehe :/

    Danke schon mal fürs Durchlesen!
     
  2. DieGoldeneMitte, 15.03.2010 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Deine Programmlogik (vor allem die Einrücklogik) ist etwas wirr.
    Wieso wird counter *in* der Schleife für *n* erhöht?
    Dein "Bench" müsstest Du ganz normal in der IDE deiner Wahl im Debugger starten können.
    Dann wird sich das Problem sicher schnell klären.

    Jedenfalls ist dein Problem kein Android, sondern ein Java-Problem.

    ADD:
    sollte das n=3*n+1 nicht im else Zweig des n%2==0 sein?
     
    Zuletzt bearbeitet: 15.03.2010
  3. Freeman1979, 20.03.2010 #3
    Freeman1979

    Freeman1979 Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    1
    Registriert seit:
    04.12.2009
    Wenn ich das richtig sehe hast deine Programmlogik im Construktor der Benchklasse. Dieser wird aber nicht aufgerufen da du die deine Properties quasi statisch aufrufst. Füg mal ein Bench x = new Bench(); ein und hol die deine Properties dann von x.

    Gruß Matze
     

Diese Seite empfehlen