Aufgabenblatt4


@dschulian

ergebnis = 1.0;

mach mal a<=b und versuchs dann

bei mir 100%


@dschulian: also der fehler bei dir muss an etwas anderes liegen, habs genauso und hab meine 100 %…


Hmm, dann will ich mal versuchen zu erklären was ich gemacht habe: :wand:

[m]** main()[/m]

  • ließt zwei Argumente aus dem Aufruf als [m]int[/m] ein
  • werden an

[m]** f()[/m] mit dem Rückgabewert [m]double[/m] als [m]int[/m] übergeben

  • Fallunterscheidung mit Hilfe der [m]if[/m]-Funktion
  • dann die [m]for[/m]-Schleife (s. o.)

Beim Aufruf mit 2 und 6 liefert mir das ganze bspw.
[m]f(2,6) = 26.832815729997478[/m] mittels [m]System.out.[/m]… was in der [m]main()[/m]-Methode angegeben ist.

Ich bin inzwischen wirklich ratlos! [m]meinString.java[/m] war dagegen ja ein Klacks :cool:


@dschulian:
also dein ergebnis sieht gut aus und ist meiner ansicht nach auch richtig. bitte prüfe nochmal explizit, ob du wirklich alle zugriffsmodifikatoren für klassen,methoden, etc richtig gesetzt hast.
ich kann nur aus eigener erfahrung sprechen, dass ich bei meinString vor lauter codestücke und testen vergessen habe die klasse meinString mit public zu kennzeichenen - das hat mir doch glatt 45% gekostet. das sind kleinigkeiten, die man oft übersieht. falls es ums verrecken nit geht, kannst ja mal deinen code posten bzw. hochladen.


dschulian,
du sollst weder Werte einlesen noch das Ergebnis ausgeben.
Einfach nur eine Methode schreiben die zwei ints nimmt und einem double zurückgibt.


danke euch jetzt hab ich auch meine 100% - habs mal wieder komplizierter gemacht, als es wirklich ist…


Ich hab jetzt schon ewig an meinem Code gebastelt und bin jetzt erst auf 50%… :frowning:
Wenn jemand mal Zeit und Lust hat würd ich mich freuen wenn er mir nen Tipp geben könnte :smiley:

public class meinString 
{
	private char[] zeichenkette=null;
	private int laenge= 0;
	
	public meinString konkateniere(meinString addierString)
	{
		for(int i=0;i<addierString.holeLaenge();i++)
		{
			setzeZeichen(laenge+i,addierString.holeZeichen(i));
		}
		laenge+=addierString.holeLaenge();
		return this;
	}
	
	public char holeZeichen(int at)
	{
		return zeichenkette[at];
	}
	
	public void setzeZeichen(int at,char zeichen)
	{
		if (at<laenge)
		{
			zeichenkette[at]=zeichen;
		}
		
		else if (at>=laenge)
		{
			if (laenge==0)
			{
				zeichenkette=new char[at+1];
				zeichenkette[laenge]=zeichen;
				laenge=at+1;
			}
			
			else
			{
				char[] tmpArray=zeichenkette;
				zeichenkette=new char[at+1];
				for(int i=0;i<tmpArray.length;i++)
					zeichenkette[i]=tmpArray[i];
				zeichenkette[laenge]=zeichen;
				laenge=at+1;
			}
		}
		
	}
	
	public char[] holeZeichenkette()
	{
		return zeichenkette;
	}
	
	public void setzteZeichenkette(char[] neueZeichenkette)
	{
		zeichenkette=neueZeichenkette;
		laenge=neueZeichenkette.length;
	}
	
	public void print()
	{
		System.out.print(zeichenkette);
		System.out.print("\n");
	}
	
	public int holeLaenge()
	{
		return laenge;
	}
	
	public meinString()
	{
		
	}
	
	public meinString(char[] zeichenkette)
	{
		for(int i=0;i<zeichenkette.length;i++)
		{
			setzeZeichen(i,zeichenkette[i]);
		}
		
	}
	
	public meinString(meinString kopierString)
	{
		for(int i=0;i<kopierString.holeLaenge();i++)
		{
			setzeZeichen(i,kopierString.holeZeichen(i));
		}
		
	}
	
}

MfG Smon


Klassischer Fall! War bei mir genau das Gleiche: ein Tippfehler!
Ein “t” zu viel:
setzteZeichenkette


public class multroots {
2
3
4
5
6 public static double funktion() {
7 int b;
8
9 double ergebnis = Math.sqrt(b);
10 int a= 7;
11 int b= 13;
12
13 if (a < b) {
14
15 for (; a < b+1; a++) {
16
17 ergebnis = ergebnis * Math.sqrt(a);
18
19 }
20 }
21 else if (a==b){
22
23 ergebnis = Math.sqrt(a);
24
25 }
26 else {
27 for (; a>b-1; a–){
28
29 ergebnis = ergebnis * Math.sqrt(a);
30
31 }
32 }
33 return ergebnis;
34 }
35 public static void main(String[] args) ;
36
37 double funktion;
38 {
39 System.out.println(funktion());
40 }
41 }

}

Koennte man mir mal bitte verraten wo der dumme fehler ist?
In Java zeigt er an das in Zeile 12 folgenderFehler ist: duplicate local variable b;

Theorieaufgabe 4.1e
Wenn wir schon gerade beim Thema sind…

Also klar, es wird nichts zugewiesen und man kann dies beheben, aber;
Überschreibt nun die lokale Variable a den übergebenen Parameter a oder überschreibt der übergebene Parameter die lokale Variable a?

Ich denke ersteres… bin mir aber nicht sicher… :rolleyes:


[quote=Gunny][code]
public class multroots {

6 public static double funktion() {
7 int b;
8
9 double ergebnis = Math.sqrt(b);
10 int a= 7;
11 int b= 13;

16
17 ergebnis = ergebnis * Math.sqrt(a);

[/code]

Koennte man mir mal bitte verraten wo der dumme fehler ist?
In Java zeigt er an das in Zeile 12 folgenderFehler ist: duplicate local variable b;
[/quote]

Also die Methode soll schonmal f(…) heißen. Außerdem soll sie auch noch a und b als Parameter übernehmen. Java beschwert sich darüber, dass du in Zeile 7 b schon deklariert hast. Du dürftest in Zeile 11 nur noch schreiben b=12 (ohne das int davor). Außerdem wird deine Funktion so wie du sie geschrieben hast immer 0 zurückgeben…

Gruß
Flo


Danke


ich wollte nur mal wieder auch meine freude über das testcase ausdrücken :slight_smile:
0% bei multroots und geht wie eine 1 :smiley:
aber is mir wurscht :gun:


Naja, 0% bedeutet ja, dass es nicht einmal kompilier bar ist, hast du mal probiert dein Prog auf der Command-Line zu kompilieren, mit javac myroots.class?

Gruß


UPDATE:

Ups, sorry hatte überlesen “geht wie eine 1”, hmm, dann sind doch die scheiss Testcases schuld!


  1. Soll in der Klasse meinString die Methode main sein(zum Beispiel um Methoden zu testen)?

  2. Nach der Abgabe kriege ich nur 50%, obwohl meine Code compilierbar ist und die Klasse und alle innere Methoden als public gekennzeichnet sind.

Woran kann es noch liegen?


Also eigentlich solltest du keine Main drinnen haben.
Diesmal waren keine Programme gefragt, sondern Klassen


OK. Aber nach der Abgabe kriege ich nur 50%, obwohl meine Code compilierbar ist und die Klasse und alle innere Methoden als public gekennzeichnet sind.

Woran kann das Problem liegen?


Guck mal ein bisschen nach oben: http://fsi.informatik.uni-erlangen.de/forumtest/thread/2900,4#1169
In mindestens zwei mir bekannten Faellen gab es nur 50%, wenn man sich bei einem Methodennamen vertippt hatte.


Bei mir ist es nicht der Fall, weil meine Code sich kompilieren lässt!!=>keine Tippfehler!


Mein Code liess sich auch einwandfrei kompilieren. Einen Fehler wuerde der Compiler ja auch nur dann aussspucken, wenn ich auf meine falsch geschriebene Methode wirklich im Programm zugreifen wuerde. In diesem Beispiel wird sie nur deklariert, aber nicht weiter verwendet.
Schau einfach alles noch mal Buchstabe fuer Buchstabe durch - ich wette, du hast irgendwo einen geringfuegigen Tippfehler uebersehen!