Frage bei Übergabewerten
-
Hi
bin ziemlicher Neuling und bin grad am probieren und "selbst-studieren" der Programmiersprache C#.
Nun habe ich eine Frage:
Ausgangsposition:
Ich habe ein Hauptprogramm und 2 Klassen:
Klasse Test:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Übergaben { class Test { public void schreiben(int y) { Console.WriteLine(y); } } }
Klasse Test2:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Übergaben { class Test2 { Test m = new Test(); int x; public void eingabe() { x = Convert.ToInt32(Console.ReadLine()); m.schreiben(x); } } }
Hauptprogramm Program:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Übergaben { class Program { static void Main(string[] args) { Test n = new Test(); Test2 m = new Test2(); n.schreiben(); Console.ReadLine(); } } }
Meine Frage ist, warum schreibt er mir die Zahl 5 in die Konsole, wenn ich n.schreiben(); aufrufe?
Es kommt immer folgender Fehler:
Keine Überladung für die schreiben-Methode nimmt 0 Argumente an.
Wäre schön, wenn Ihr mir helfen könntet.
-
Die Methode schreiben(...) in der Klasse Test erwartet beim Aufruf ein Argument vom Typ int.
D.h. du musst einen int-Wert uebergebe, z.B. so:n.schreiben(5);
-
Mein Ziel ist es aber in Test2 der Variablen int x eine Zahl per Benutzereingabe zuzuweisen und diese Variable(int x) der Funktion schreiben(); in Test zu übergeben.
Im Hauptprogramm möchte ich nur noch schreiben() aufrufen und die Benutzereingabe sozusagen anzeigen lassen.
-
Poweruser schrieb:
Im Hauptprogramm möchte ich nur noch schreiben() aufrufen und die Benutzereingabe sozusagen anzeigen lassen.
Wieso moechtest du nur noch schreiben() aufrufen?
Wenn du willst kannst du natuerlich eingabe() zu schreiben() umbenennen in der Klasse Test2 und dann die Methode mitTest2 t2 = new Test2(); t2.schreiben();
aufrufen.
Oder anstatt sie umzubennenen rufst du halt t2.eingabe() auf, das geht auch.
-
ich glaube, ich drücke mich unpräzise aus.
ich lege in Klasse Test in diesem Fall jetzt ein Array an.
[cs]using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Übergaben { class Test { Test2 t = new Test2(); int[] arr = new int[7]; public void dnd() { for (int i = 0; i < arr.Length; i++) { arr[i] = i + 1; Console.WriteLine(arr[i]); t.schreiben(arr); } } } }
Und möchte nun dieses in Test angelegte Array einer Funktion der Klasse Test2 übergeben, die mir dieses Array in die Konsole schreibt.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Test_Übergaben
{
class Test2
{public void schreiben(int[] lol)
{Console.WriteLine(lol);
}}
}
[/cs]Nun rufe ich im Hauptprogramm einfach nur noch schreiben() auf und die Konsole erscheint mit den 7 Zahlen des Arrays.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Übergaben { class Program { static void Main(string[] args) { Test2 d = new Test2(); d.schreiben(); Console.ReadLine(); } } }
-
Poweruser schrieb:
Nun rufe ich im Hauptprogramm einfach nur noch schreiben() auf und die Konsole erscheint mit den 7 Zahlen des Arrays.
Selber Murks wie oben. So funktioniert das nicht.
Wenn eine Methode Parameter erwartet, kannst Du sie nicht einfach nach belieben weglassen.Der mehrfache Aufruf von t.schreiben(arr); in der for-Schleife spricht auch dafür, dass Du Dir ein gutes Grundlagenbuch besorgen solltest.
-
Ja, der Aufruf in der Schleife war ein Fehler, sorry hatte ich nicht ausgebessert.
Der springende Punkt ist einfach, wie kann ich ein Array aus einer Klasse in einer anderen Klasse weiterverwenden.
Das ich im Hauptprogramm ein Array anlegen kann und einer Funktion übergeben kann ist mir jetzt klar, aber ich möchte zwischen den 2 Klassen "kommunizieren" nicht zwischen Hauptprogramm und Klasse.
-
Es ist sehr schwierig aus deinen Beschreibungen zu erraten, was du genau haben moechtest.
Ich nehme an, du moechtest, dass zwei Objekte von zwei verschiedenen Klasse miteinander kommunizieren koennen. Dann muss du vom jeweiligen Objekt auf das andere eine Referenz haben.
Solche Zyklen sind allerdings oftmals keine gute Idee.Es waere einfacher, wenn du etwas konkreter fragen koenntest mit einem sinnvollen Beispiel.
*Edit
Mit welchem Buch/Tutorial lernst du C#?
-
Galileo Openbook.
Ich versuche es noch einmal :-).
In Klasse Test wird das Array arr[] angelegt.
In Klasse Test wird das Array arr[] in einer Funktion per for-schleife mit Zahlen gefüllt.
Nun möchte ich das Array arr[] einer Funktion in einer anderen Klasse übergeben. Die Funktion der anderen Klasse soll nichts anderes tun, als mir dieses auf dem Bildschirm/Konsole ausgeben.
Wie funktioniert das :-).
Ich bin echt am verzweifeln.
-
Wo ist das Problem?
void Main() { Test t = new Test(); t.FillArray(); ArrayPrinter ap = new ArrayPrinter(); ap.PrintArray(t.arr); } class Test { //Der Einfachheit halber ist das public public int[] arr; public Test() { arr = new int[10]; } public void FillArray() { for (int i=0;i<10;++i) arr[i] = i; } } class ArrayPrinter { public void PrintArray(int []arr) { for (int i=0;i<arr.Length;++i) Console.WriteLine(arr[i]); } }
-
Du solltest dich mit den Grundlagen der Programmierung mal ordentlich auseinander setzen.
Hier dennoch die ungefaehre Vorgehensweise:1. Erstelle in der Klasse 1 dein Array und befuelle es mit deinen Daten
2. Erstelle dir ein Objekt der Klasse 2 und uebergib das Array an die jeweilige Funktion
3. Iteriere nun in der Methode von Klasse 2 ueber das uebergebene Array und gib es aus.Noch ein Hinweis: Benutze bessere Namen fuer deine Klassen, bei diesem ganzen Testgeraffel blickt ja keiner mehr durch, fast so schlimm wie dieser Foo/Bar, Blub/Bla Schwachsinn.