Mini Projekt 1 (Finde den Fehler noch nicht)

subzero

Erfahrenes Mitglied
Hallo Freunde!

Ih habe jetzt seid nichmal 3 Wochen Programmierung (Java) als Vorlesung an der Uni.
Wir haben ein Mini Projekt gestellt bekommen, an dem wir arbeiten sollen.

Die Aufgabe ist ist so gestellt (Die Aufgabe ist unterbestimmt,sprich es gibt mehrere Lösungswege):

In einer Bank muß für eine Kontoeröffnung der Name eines Kunden (String), seine
Kontonummer (int) und dessen Eingangsguthaben (double), welches mindestens 100 €
betragen muß erfaßt werden. Sollte das Eingangsguthaben 100 Euro unterschreiten geben Sie
über System.out.println (“Zu geringes Guthaben“); eine Warnung aus und setzen Sie dann die
Prüfsummenberechnung fort.
Um eine Prüfsumme zu ermitteln soll folgender Algorithmus implementiert werden:
1. Ermittlung des größten gemeinsamen Teilers aus Kontonummer und
Eingangsguthaben (nutzen sie den klassischen oder modernen euklidschen
Algorithmus)
2. Multiplikation dieses ggT mit der Anzahl der Zeichen im Namensstring
3. Teilen des Ergebnisses aus Punkt 2 mit der Anzahl des Buchstaben „a“ im Namen.
Sollte der Buchstabe „a“ nicht enthalten sein wird der Anzahlwert standardmäßig auf
1 gesetzt. Geben Sie das Ergebnis vollständig, d.h. mit Nachkommastellen aus.
4. Abschneiden möglicher Nachkommastellen
Die ermittelte Prüfsumme soll anschließend zurückgegeben werden.
Verwenden Sie keine Arrays, keine Listen und keine Rekursionen!
Nutzen Sie für die Realisierung die folgende Vorlage:
Code:
public class Test
{
public int pruefe(String name, int kontonr, double guthaben)
{
//hier die Lösung implementieren
}
public static void main(String[] args)
{
Test t = new Test();
System.out.println(t.pruefe(“Hans Maier”, 1, 1000.00));
}
}

Meine bisherige Lösung, die der Compiler nicht annimmt:

Code:
public class Test
{
public int pruefe(String name, int kontonr, double guthaben)
{
//hier die Lösung implementieren

 if (guthaben < 100.00)
 {
 System.out.println('Zu geringes Guthaben');
 {
 else //prüfung fortsetzen
 {
   for(i = 0; i <= name.length; i++)  // anzahl der a im namen
   {
   if (name.charAt(i) == 'a')
   { a += 1; }
   }
 
   while (guthaben != 0)    // ggt berechnen
   {
   if(knr > guthaben){ knr = knr - guthaben;}
   else { guthaben = guthaben - knr;}
   
   }
   return ((knr * name.length) / a);
   
}
public static void main(String[] args)
{
Test t = new Test();
System.out.println(t.pruefe(“Hans Maier”, 1, 1000.00));
}

HILFE :confused:
 
Fehler sind da jede Menge :) macht aber nichts dafür sind wir ja da..
Code:
name.length --> wäre ein Variablen aufruf, die Klasse String hat aber keine Variable length sondern nur eine Methode also name.length()
for(i = 0; i <= name.length; i++)  // anzahl der a im namen
   {
   if (name.charAt(i) == 'a')
   { a += 1; }
   }
i ist nicht deklariert damit kann der Kompiler nichts anfangen, a genauso, du musst also den Datentyp festlegen(int, String, char etc..)

if(knr > guthaben){ knr = knr - guthaben;}
knr kommt nirgends in deinem Code vor schau dir die Methoden Signatur an dann weisst du wie die Variable heissen muss...
so damit solltest du schonmal weiter kommen...

Gruss
elmato
 
SO!

Danke schonmal, ... soweit so gut!

Nächstes Problem:

Euklid!
Ich habe in der Aufgabenstellung das Problem das ich dort einen ALgorithmus anwenden soll um den Größtengemeinsamenteiler aus kontonr und guthaben zu ermitteln.

Jezt habe ich im Netz etwas gefunden, kann es aber nicht anwenden bzw. einfügen:
Code:
  public static int ggT( int m, int n)
  {
    if( n != 0) return ggT( n, m % n); else return m;
  }

Wobei m = kontonr und n = guthaben sein soll

Es geht jetzt ausschließlich darum das einzubinden, wie geht das?!
Danke
 
Hallo subzero,

wie wär es wenn du auch die Fehlermeldung dazuschreiben würdest :) ? Ich weiß jetzt bspw. nicht warum du dieses Snippet nicht einfügen kannst,wo genau der Fehler ist ;) .

Eine Angabe was der Compiler oder die Laufzeitumgebung als Fehler meldet wäre in jedem Fall sehr hilfreich. Wenn keine Fehlermeldung vorhanden ist, dann musst du genauer schildern wo es hakt.


Vg Erdal
 
Moin!
Laut deiner Aufgabenstellung sollst du aber keinen rekursiven Algorithmus verwenden?!
Musst dir schon was iteratives zusammenbasteln/suchen.
Egal ob nun rekursiv oder iterativ, wie man sowas einbindet hab ich mal an deinem Code angedeutet:

Code:
public class Test{
   public int pruefe(String name, int kontonr, double guthaben){
      ...
      int ggt = getGGT(kontonr, guthaben)
      ...
      ...
   }
   
  public int getGGT(int a, double b){
     //deine implementation des ggt algorthimus
  }
}

hoffe mal das hilft weiter!
*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Code:
public class Test
{
	
public int pruefe(String name, int kontonr, double guthaben)
	{ int i = 0;
	  double a,b= 0.00;
	  int anz_a = 0;
	  a = kontonr;
	  b = guthaben;
		
		if(guthaben < 100.00)
		{
			System.out.println("Zu geringes Guthaben!");
		}
		
		while (a != b)           // solange n ungleich m
		{
		    if (a > b)           // wenn n > m
			a = a-b;         // setze n auf n-m
		    else                 // sonst
			b = b-a;         // setze m auf m-n
		} 

		a = a * name.length();
		
		for(i = 0; i< name.length(); i++)
		{
			if(name.charAt(i) == 'a')
			{anz_a++;}
		}
		if(anz_a == 0){anz_a = 1;} 
		return((int)a / anz_a);
	}

	
	

	

public static void main (String [] args)
{
		Test  t = new Test ();
		System.out.println (t.pruefe("Hans Maier",1,1000.00));
}
}

Das ist meine Endlösung UND sie Funktioniert!
Danke auch für den Hinweise!
Einiges hat mich weiter gebracht...

Ihr könnt es ja prüfen udn wenn ihr noch Macken findet?! MELDEN!
Danke!

Ich werde nächstesmal genauere Beiträge posten!
Mein nächstes Mini Projekt startet vorraussichtlich Freitag :)
 

Neue Beiträge

Zurück