Fehler gesucht - Codeblindheit oder Blödheit :S

2

2Stoned

Fortgeschrittenes Mitglied
13
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!
 
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:
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
 

Ähnliche Themen

A
Antworten
1
Aufrufe
622
swa00
swa00
D
Antworten
3
Aufrufe
438
jogimuc
J
J
Antworten
0
Aufrufe
540
JonHart
J
Zurück
Oben Unten