Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Methode aufrufen bei java » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Methode aufrufen bei java
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Methode aufrufen bei java Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,
ich habe folgene Klasse (bei Java) geschrieben und wollte im Hauptprogramm testen, ob meine berechneNote-Methode funktioniert aber ich wei? nicht wie ich es aufrufen soll. Normaler weise ruft man die so auf z.B.

Fach mathe1=new Fach("Mathe1",4,96);
mathe1.zeigeInfo();

Aber bei berechneNote funktioniert es nicht. Ich dache es liegt daran, dass es ein double als Rückgabewert hat aber das hat mcih nicht viel weiter gebracht(

Danke für die Hilfe


public class Fach {

private String name;
private int ects;
private int maxPunkte;
private int istPunkte;
public Fach(String name, int ects, int punkte){
this.ects=ects;
this.name=name;
this.maxPunkte=punkte;
}
public void setPunkte(int istPunkte){
this.istPunkte=istPunkte;
}
private double berechneProzent(int istPunkte){
return(double)istPunkte/(double)this.maxPunkte*100.0;
}
public void zeigeInfo(){
System.out.println("Name: "+name+" ects "+ects+" MaxPunkte "
+maxPunkte+" Punkte "+istPunkte);
}
private double berechneNote(int istPunkte){
double istNote=5;
double istProzent=this.berechneProzent(istPunkte);
double prozent[]={95,90,85,80,75,70,65,60,55,50};
double note[]={1, 1.3, 1.7, 2, 2.3, 2.7, 3, 3.3, 3.7 ,4};
for(int i=0;i<=istProzent;i++){
if(istProzent==prozent[i]){
istNote=note[i];}
}
return istNote;

}

}
06.07.2013 10:28 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Bitte formatiere Code entsprechend indem du ihn zwischen [ code ] und [ /code ] platzierst (ohne die Leerzeichen), sonst ist es relativ mühsam, den Code zu lesen.

Es gibt bei deinem Code erstmal ein paar Ungereimtheiten. Deine Klasse hat eine private Variable "istPunkte", für die du auch eine set-Methode hast, dann aber nie verwendest. Entweder solltest du sie entfernen, oder du arbeitest bei berechneNote und berechneProzent einfach damit.

Desweiteren wird deine berechneNote-Funktion nicht funktionieren, sondern mit einer OutOfBounds-Exception auf die Nase fallen. Das Problem ist, dass i in der Schleife bis isProzent geht, d.h. potenziell bis zu einem Wert zwischen 0 und 100. Du nutzt i aber als Index der Arrays und die haben ja keine 101 Elemente.
Hier ist die Logik aber auch falsch. Du solltest lieber über das prozent-Array iterieren und dann schauen, ob istProzent diesen Wert erreicht oder nicht. Und du musst auch aufpassen, in welcher Reihenfolge du iterierst, da dein prozent-Array von oben nach unten sortiert ist.
Außerdem hast du berechneNote privat gemacht, wodurch du sie von außen sowieso nicht aufrufen könntest. Wenn du das willst, dann musst du sie als public markieren.
Ich schreibe dir das Ganze jetzt mal um:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
package com.tngtech.java.junit.dataprovider;

public class Fach {

	private String name;
	private int ects;
	private int maxPunkte;
	private int istPunkte;

	public Fach(String name, int ects, int punkte) {
		this.ects = ects;
		this.name = name;
		this.maxPunkte = punkte;
	}

	public void setPunkte(int istPunkte) {
		this.istPunkte = istPunkte;
	}

	private double berechneProzent(int istPunkte) {
		return (double) istPunkte / (double) this.maxPunkte * 100.0;
	}

	public void zeigeInfo() {
		System.out.println("Name: " + name + " ects " + ects + " MaxPunkte "
				+ maxPunkte + " Punkte " + istPunkte);
	}

	public double berechneNote() {
		double istProzent = berechneProzent(istPunkte);
		double prozent[] = { 95, 90, 85, 80, 75, 70, 65, 60, 55, 50 };
		double note[] = { 1, 1.3, 1.7, 2, 2.3, 2.7, 3, 3.3, 3.7, 4 };

		for (int i = 0; i < prozent.length; i++) {
			if (istProzent >= prozent[i]) {
				return note[i];
			}
		}

		return 5;
	}

}


Ein Beispielaufruf sieht dann so aus:

code:
1:
2:
3:
4:
5:
6:
Fach mathe = new Fach("Mathematik", 4, 96);
mathe.setPunkte(70);

System.out.println("Erreichte Note: " + mathe.berechneNote()); // Erreichte Note: 2.7


__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
06.07.2013 13:00 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ok habe verstanden.
Ich habe da aber noch eine Frage, wenn eine Methode in einer Klasse nicht rot untersstrichen ist und auch keine rote Zeichen für Fehler am Rand hat, heißst es noch lange nicht, dass die Methode funktioniert.
Und wenn die Methode nicht funkioniert, kann ich die in der Hauptklasse nicht aufrufen?
06.07.2013 13:43 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Achso, ich musste die private Methode verwenden, es war die Vorgabe in der Klausur. Jetzt verstehe ich, wieso ich dann folgende Methode schreiben sollte)

public double berechneNote(){
double ergebnis;
ergebnis=berechneNote(istPunkte);
return ergebnis;
}
06.07.2013 13:56 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Lycaner
Jetzt verstehe ich, wieso ich dann folgende Methode schreiben sollte)


Das kann natürlich sein. Dann musst du aus der public-Methode eben die private-Methode mit der Klassenvariable aufrufen.

code:
1:
Ich habe da aber noch eine Frage, wenn eine Methode in einer Klasse nicht rot untersstrichen ist und auch keine rote Zeichen für Fehler am Rand hat, heißst es noch lange nicht, dass die Methode funktioniert.


Natürlich nicht. Das Anzeigen solcher Fehler/Probleme ist eine reine Nettigkeit deiner IDE, die dir möglichst früh mitzuteilen versucht, wenn du was falsch machst. Die IDE kann aber natürlich nur Dinge wie Syntaxfehler und ähnliches erkennen: Also zum Beispiel, wenn du dich bei einer Variable vertippt hast (z.B. "istPunke"), die es dann nicht gibt; wenn Variablen den falschen Typ haben; wenn Variablen nicht initialisiert wurden; oder auch wenn du auf Methoden zugreifen willst, die nicht sichtbar sind.
Die Logik des Programms kann die IDE aber ja nicht kennen, das wäre zuviel verlangt. Wenn du also die Note falsch berechnest, dann kann die IDE dir das nicht mitteilen.

Um sicherzugehen, dass ein Programm tatsächlich wie gewünscht funktioniert, gibt es in der professionellen Welt Tests, die man parallel zum eigentlichen Programm schreibt. Damit sieht man sofort, ob es tut, was es soll, und viel wichtiger, man sieht bei späteren Änderungen schnell, ob man versehentlich dadurch irgendetwas "kaputtgemacht" hat. Das aber nur als Information.

code:
1:
Und wenn die Methode nicht funkioniert, kann ich die in der Hauptklasse nicht aufrufen?


Aufrufen schon, aber es wird halt nicht funktionieren.

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
06.07.2013 14:07 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Danke für die schnelle Antworten und Hilfe.
06.07.2013 14:20 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Methode aufrufen bei java