hi
hab jetzt mit c# angefangen und erstmal ein programm für konsole geproggt. hab davor ein bisschen c++ gemacht, deswegen hats gleich oop.
es ist ein kleines menü, wo man auswählen kann, welche windows-applikation gestartet werden soll. ich mach erstmal ein grundgerüst von der menü-klasse, wo in einem 2-dimensionalen array deffiniert wird, welche programme zur verfügung stehen (jeweils name und pfad).
hier mal der komplette code
using System;
using System.Diagnostics;
//Klasse zum Ausgeben des Menüs
class ProgrammeMenue {
// 2-dimensionales Array für die Applikationen deklarieren
private string[] Applikationen = new string[3][];
private string[] Applikationen[0] = new string[2]{"Editor","notepad.exe"};
private string[] Applikationen[1] = new string[2]{"Explorer","explorer.exe"};
private string[] Applikationen[2] = new string[2]{"Registrierungseditor","regedit.exe"};
private int LetzteAuswahl = 0;
public void Ausgeben()
{
Console.WriteLine("---------------------------------------------------------------------------");
Console.WriteLine("Hallo Welt - Ein Menueprogramm fuer Systemapplikationen *lol*");
Console.WriteLine("---------------------------------------------------------------------------\n");
Console.WriteLine("Um eine Systemprogramm zu starten, geben Sie die entsprechende Zahl ein.\n");
Console.WriteLine("<1> Explorer");
Console.WriteLine("<2> Editor");
Console.WriteLine("<3> Registrierungseditor");
Console.Write("\n");
Console.WriteLine("<0> Beenden");
Console.Write("\n");
}
public void Eingeben()
{
Console.Write("--> Ihre Eingabe: ");
String Eingabe = Console.ReadLine();
}
public void Auswaehlen(int AuswahlNr)
{
if (AuswahlNr == 0)
{
LetzteAuswahl = 0;
} else {
}
}
public int GetLetzteAuswahl()
{
return LetzteAuswahl;
}
// Process.Start("regedit.exe");
}
public class Test01
{
public static void Main()
{
// Hauptmenü deklarieren als Instanz der Klasse "Menue"
ProgrammeMenue Hauptmenue = new ProgrammeMenue();
//
bool Hauptmenue_schliessen = false;
while (!Hauptmenue_schliessen) {
Hauptmenue.Ausgeben();
Hauptmenue.Eingeben();
if (Hauptmenue.GetLetzteAuswahl() == 0)
{
Hauptmenue_schliessen = true;
}
}
}
}
es geht aber um die stelle hier:
// 2-dimensionales Array für die Applikationen deklarieren
private string[] Applikationen = new string[3][];
private string[] Applikationen[0] = new string[2]{"Editor","notepad.exe"};
private string[] Applikationen[1] = new string[2]{"Explorer","explorer.exe"};
private string[] Applikationen[2] = new string[2]{"Registrierungseditor","regedit.exe"};
ich komm einfach nicht drauf was ich da falsch gemacht habe!
beim compilieren kommt folgendes:
Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft (R) .NET Framework version 1.1.4322
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
test02.cs(10,33): error CS0650: Syntax error, bad array declarator. To declare a
managed array the rank specifier precedes the variable's identifier
test02.cs(10,37): error CS1002: ; expected
test02.cs(10,50): error CS1003: Syntax error, ']' expected
test02.cs(11,33): error CS0650: Syntax error, bad array declarator. To declare a
managed array the rank specifier precedes the variable's identifier
test02.cs(11,37): error CS1002: ; expected
test02.cs(11,50): error CS1003: Syntax error, ']' expected
test02.cs(12,33): error CS0650: Syntax error, bad array declarator. To declare a
managed array the rank specifier precedes the variable's identifier
test02.cs(12,37): error CS1002: ; expected
test02.cs(12,50): error CS1003: Syntax error, ']' expected
kann mir einer helfen?
danke schonmal!
2 dimensionales Array:
private string[,] Applikationen = new string[3,2];
Zuweisung:
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
danke an noodles und nils für die antworten, aber es geht leider immer noch nicht.
habs jetzt so:
private string[,] Applikationen = new string[3,2];
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
hier nochmal das ganze programm:
using System;
using System.Diagnostics;
//Klasse zum Ausgeben des Menüs
class ProgrammeMenue {
// 2-dimensionales Array für die Applikationen deklarieren
private string[,] Applikationen = new string[3,2];
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
private int LetzteAuswahl = 0;
public void Ausgeben()
{
Console.WriteLine("---------------------------------------------------------------------------");
Console.WriteLine("Hallo Welt - Ein Menueprogramm fuer Systemapplikationen *lol*");
Console.WriteLine("---------------------------------------------------------------------------\n");
Console.WriteLine("Um eine Systemprogramm zu starten, geben Sie die entsprechende Zahl ein.\n");
Console.WriteLine("<1> Explorer");
Console.WriteLine("<2> Editor");
Console.WriteLine("<3> Registrierungseditor");
Console.Write("\n");
Console.WriteLine("<0> Beenden");
Console.Write("\n");
}
public void Eingeben()
{
Console.Write("--> Ihre Eingabe: ");
String Eingabe = Console.ReadLine();
}
public void Auswaehlen(int AuswahlNr)
{
if (AuswahlNr == 0)
{
LetzteAuswahl = 0;
} else {
}
}
public int GetLetzteAuswahl()
{
return LetzteAuswahl;
}
// Process.Start("regedit.exe");
}
public class Test01
{
public static void Main()
{
// Hauptmenü deklarieren als Instanz der Klasse "Menue"
ProgrammeMenue Hauptmenue = new ProgrammeMenue();
//
bool Hauptmenue_schliessen = false;
while (!Hauptmenue_schliessen) {
Hauptmenue.Ausgeben();
Hauptmenue.Eingeben();
if (Hauptmenue.GetLetzteAuswahl() == 0)
{
Hauptmenue_schliessen = true;
}
}
}
}
die fehlermeldung:
Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft (R) .NET Framework version 1.1.4322
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
test01.cs(16,15): error CS1003: Syntax error, ']' expected
test01.cs(17,15): error CS1003: Syntax error, ']' expected
C:\csharp>
fehlt vielleicht irgendeine using-zeile? oder hat das was mit der klasse zu tun?
Versuch mal einen Konstruktor für Deine Hauptmenüklasse zu schreiben und das Array erst dort mit Werten zu initialisieren.
class Hauptmenue
{
private string[,] Applikationen = new string[3,2];
Hauptmenue(){
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
}
/* usw. */
}
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo chri,
wenn ich es richtig gesehe habe, hast du Problem im Umgang mit mehrdimesionalen Arrays. Mehrdimsionale Arrays solltest du dir m.E. mal gründlich in einem Buch anschauen (zumal es ja wohl ein reines Syntax-Problem ist).
herbivore
den array in den konstruktor zu packen hat leider nichts geholfen.
hier nochmal mein jetziger quellcode:
using System;
using System.Diagnostics;
//Klasse zum Ausgeben des Menüs
class ProgrammeMenue {
string[,] Applikationen = new string[3,2];
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
private int LetzteAuswahl = 0;
public void Ausgeben()
{
Console.WriteLine("---------------------------------------------------------------------------");
Console.WriteLine("Hallo Welt - Ein Menueprogramm fuer Systemapplikationen *lol*");
Console.WriteLine("---------------------------------------------------------------------------\n");
Console.WriteLine("Um eine Systemprogramm zu starten, geben Sie die entsprechende Zahl ein.\n");
Console.WriteLine("<1> Explorer");
Console.WriteLine("<2> Editor");
Console.WriteLine("<3> Registrierungseditor");
Console.Write("\n");
Console.WriteLine("<0> Beenden");
Console.Write("\n");
}
public void Eingeben()
{
Console.Write("--> Ihre Eingabe: ");
string Eingabe = Console.ReadLine();
}
public void Auswaehlen(int AuswahlNr)
{
if (AuswahlNr == 0)
{
LetzteAuswahl = 0;
} else {
}
}
public int GetLetzteAuswahl()
{
return LetzteAuswahl;
}
// Process.Start("regedit.exe");
}
public class Test01
{
public static void Main()
{
// Hauptmenü deklarieren als Instanz der Klasse "Menue"
ProgrammeMenue Hauptmenue = new ProgrammeMenue();
//
bool Hauptmenue_schliessen = false;
while (!Hauptmenue_schliessen) {
Hauptmenue.Ausgeben();
Hauptmenue.Eingeben();
if (Hauptmenue.GetLetzteAuswahl() == 0)
{
Hauptmenue_schliessen = true;
}
}
}
}
und folgende fehlermeldung:
Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft (R) .NET Framework version 1.1.4322
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
test02.cs(8,19): error CS1003: Syntax error, ']' expected
test02.cs(9,19): error CS1003: Syntax error, ']' expected
kann mir jemand sagen welchen (dummen) syntax-fehler ich hier gemacht habe?
Hallo chri,
die beiden Zeilen stehen direkt innerhalb der Klasse. Sie müssen aber innerhalb einer Methode stehen. Aber das ist genau, was MarsStein schon gesagt hat.
herbiviore
ja, ich habs ja schon mit dem konstruktor probiert:
public ProgrammMenue()
{
string[,] Applikationen = new string[3,2];
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
}
der compiler gibt aber die selbe fehlermeldung aus.. bin schon am verzweifeln X(
Hier nochmal Dein Code mit dem Konstruktor, bei mir läßt sich das so übersetzen und läuft auch!!
using System;
using System.Diagnostics;
//Klasse zum Ausgeben des Menüs
class ProgrammeMenue {
string[,] Applikationen = new string[3,2];
public ProgrammeMenue(){
Applikationen[0,0] = "Editor";
Applikationen[0,1] = "notepad.exe";
}
private int LetzteAuswahl = 0;
public void Ausgeben()
{
Console.WriteLine("---------------------------------------------------------------------------");
Console.WriteLine("Hallo Welt - Ein Menueprogramm fuer Systemapplikationen *lol*");
Console.WriteLine("---------------------------------------------------------------------------\n");
Console.WriteLine("Um eine Systemprogramm zu starten, geben Sie die entsprechende Zahl ein.\n");
Console.WriteLine("<1> Explorer");
Console.WriteLine("<2> Editor");
Console.WriteLine("<3> Registrierungseditor");
Console.Write("\n");
Console.WriteLine("<0> Beenden");
Console.Write("\n");
}
public void Eingeben()
{
Console.Write("--> Ihre Eingabe: ");
string Eingabe = Console.ReadLine();
}
public void Auswaehlen(int AuswahlNr)
{
if (AuswahlNr == 0)
{
LetzteAuswahl = 0;
} else {
}
}
public int GetLetzteAuswahl()
{
return LetzteAuswahl;
}
// Process.Start("regedit.exe");
}
public class Test01
{
public static void Main()
{
// Hauptmenü deklarieren als Instanz der Klasse "Menue"
ProgrammeMenue Hauptmenue = new ProgrammeMenue();
//
bool Hauptmenue_schliessen = false;
while (!Hauptmenue_schliessen) {
Hauptmenue.Ausgeben();
Hauptmenue.Eingeben();
if (Hauptmenue.GetLetzteAuswahl() == 0)
{
Hauptmenue_schliessen = true;
}
}
}
}
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
achso, das array wird in der klasse deffiniert und im konstruktor zugewiesen!
wieso muss das bei arrays eigentlich sein? die variable "LetzteAuswahl" wird ja in der klasse selber initialisiert und gleich zugewiesen. und ist das nur bei arrays so?
@ MarsStein: danke!
Das ist immer dann so, wenn Du eine Variable nicht zusammen mit der Deklaration initialisieren kannst. Wenn Du also im gleichen Aufruf deklarierst und zuweist, geht das auch bei Arrays:
int[] test = new int[]{1,2,3,4};
Wenn die Zuweisung erst nach der Deklaration erfolgt, muss es in einer Methode geschehen.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
nochmal danke an MarsStein!
das ist echt ein super forum!
ich denke das thema ist damit abgeschlossen.
Hallo chri,
achso, das array wird in der klasse deffiniert und im konstruktor zugewiesen!
nein! Das Array wird in der Klasse deklariert und zugewiesen, aber der Zugriff auf die Array-Elemente erfolgt im Konstuktor. Unterscheide das Array immer von seinen Elementen. Deshalb habe ich dir ja auch empfohlen ein Buch zu Rate zu ziehen.
herbivore