Problem mit Array

Hallo :smile:
ich habe ein Problem zu dem Thema Array.
Wir machen dies gerade in der Schule durch und haben nun ein Problem mit einer Aufgabe. Diese lautet:

Als Mitarbeiter eines Softwarehauses haben Sie die Aufgabe ein Programm zur Erfassung und Auswertung von Wahlergebnissen zu erstellen. Das Programm soll mit Hilfe der Array-Methodik erstellt werden und folgendes „können“:
-Festlegung der Kanidatenanzahl
-Erfassung der Stimmenzahl der Kanidaten
-Die Summe aller abgegebenen Stimmen ermitteln
-der prozentuale Anteil der Kanidaten am Wahlergebnis
-Ausgabe des Wahlsiegers mit absoluten und prozentualen Stimmanteilen

Nun habe ich das Problem, dass ich schon ziemlich am Anfang der Aufgabe scheitere.
Mein größtes Problem ist die Variable „String“, da wir das noch nie in der Schule gemacht haben.

Ich hoffe ihr könnt mir weiterhelfen.
Wenn ihr noch Fragen zu der Aufgabe habt könnt ihr sie gerne stellen.
Im Voraus schon einmal Danke.
Liebe Grüße :smile:

Hallo WiF-Schülerin,

ich habe bei Wer-Weiss-Was noch nie eine Anfrage bearbeitet und kann leider garnicht sehen, in welcher Programmiersprache ihr das programmieren müsst? Bestimmt habe ich das nur übersehen, aber jetzt sehe ich leider nur das allgemeine Problem.

Liebe Grüße! :smile:

Wir arbeiten mit Eclipse und die Programmiersprache ist Java

Okay, alles klar, aaalso…
Erstmal noch eine Frage: Wozu genau brauchst du hier ein String-Array? Wenn ich die Aufgabe richtig verstehe, ist der Name des Wählers zunächst irrelevant - falls nicht, funktioniert eine String Variable exakt genauso wie eine int-Variable bzw. Array! Gibt es denn noch weitere Vorgaben oder eine Vorlage?

Liebe Grüße!

Wir arbeiten mit Eclipse und die Programmiersprache ist Java

Hallo =)

Ein String ist eine Zeichenkette von Buchstaben, Zahlen etc.
Sie wird so deklariert:

String string = „Das ist ein String“;

Wenn du weitere Hilfe brauchst, sag einfach bescheid.
Beim programmieren ist es immer „Learning by doing“ =)

Viel Spaß!

Hallo wif-Schülerin

Ich bin neu hier bei wer-weiss-was, von daher entschuldige wenn ich mich ungeschickt anstelle.

Die erste frage die sich mir stellt ist: in welche Sprache soll das programm geschrieben werden? ich gehe mal von Java aus.

mit „Erfassung der Stimmenzahl der Kanidaten“ meist du sicher wie oft ein Kandidat gewählt wurde.

erstmal muss ich sagen das es ungewöhnlich ist sowas nur mit Arrays zu machen und keine anderen Daten-Strukturen zu verwenden, aber es geht sicherlich erstmal ums lernen.

Hier sind erstmal die Funktionen:

###############################################
public void addKandidate( String name )
{
String[] newArray = new String[kandidateNames.length + 1];
for( int i = 0; i votes[winnerId] )
{
winnerId = i;
}
}

System.out.println(„Gewnnen hat „+kandidateNames[winnerId]+“ mit „+votes[winnerId]+“. das sind „+getRelativStock(kandidateNames[winnerId],true)+“% der gültigen Stimmen.“);
}

######################################

hab mit folgendem code getestet. hat soweit geklappt:

#############################
addKandidate(„Staffan“);
addKandidate(„Simone“);
addKandidate(„Berta“);
System.out.println(""+getNumberOfKandidates()+" Kandidaten nehamen an der wahl teil");
startElection();
vote(„Staffan“);
vote(„Simone“);
vote(„Simone“);
vote(„Berta“);
vote(„Berta“);
vote(„Berta“);
vote(„Berta“);
vote(„Berta“);
vote(„Berta“);
vote(„Berta“);
vote(„Obama“);

System.out.println(""+getNumberOfVotes(false)+" Stimmen wurden abgegeben. „+getNumberOfVotes(true)+“ Stimmen waren gültig.");
System.out.println("Staffan: "+getRelativStock(„Staffan“, false));
System.out.println("Simone: "+getRelativStock(„Simone“, false));
System.out.println("Berta: "+getRelativStock(„Berta“, false));
printWinner();

######################################

wenn du noch weiter fragen hast … fragen

bye

sry, müsste erst Selfhtml zu Rate ziehen, mir fehlt die Zeit, deswegen schaue doch selber in Selfhtml von Meybaum nach. Da ist ein ausführlich und detailliert beschriebener Text zum Thema Strings

Hi,

ein String ist einfach eine Zeichenkette. Da das Wort noch nichtmal in der Aufgabenstellung vorkommt, würde ich tippen der Anfang der Aufgabe fehlt. Ich würde mal sagen du sollst ein int-Array mit der Anzahl der Kanidaten als Größe anlegen:

int[] results = new int[canidateCount];

und daraus dann Ausgabestrings erzeugen. Diese kannst du folgendermaßen zusammenbauen:

String s = "Kanidat " + 2 + " hat " + results[2] + „Stimmen bekommen“;

Natürlich musst du die Ausgaben mit einfachen Rechnungen ergänzen, um z.B. Prozentwerte zu bekomen.

Viel Erfolg!

PS: Im Internet gibt es sehr viele Beispiele für String und Arrayoperationen, ich will da jetzt keine Schleichwerbung für einzelne Seiten machen.

Hallo,

wo genau liegt dein Problem? Du brauchst doch nur einen String um den Namen des Siegers auszugeben. Sonst brauchst du doch keinen String.

Was hast du denn für einen Ansatz?

Als Tipp - guck dir mal an was eine ArrayList kann, die ist schneller und einfacher zu verstehen als ein normaler Array und erfüllt ebenfalls die Aufgabe…

So nun zu deinem Problem mit einem String.

Ein String ist eine Zeichenkette. Genau dieser Satz ist bspw. ein String du kannst ihn per ±Operator erweitern wobei das sehr Speicherintensiv ist, da ein String als Objekt nicht erweiterbar ist.

zur erklärung eine kleine Methode
String test;
String meinString(){
test = „Mein test“;
return test;
}

Nun hast du ein Stringobjekt im Speicher liegen. Nun musst du aus irgend einem Grund den String erweitern.

String meinErweiterterString(){
test = meinString()+" Erweiterung";
return test;
}

nun hast du 2x den String test im Speicher. Einmal als „mein String“ und einmal als „mein String Erweiterung“ wobei die Variable test nur letzteren refernziert.

Besser ist es dann den String als Stringbuilder zu verwenden. Dieser ist erweiterbar. Aber das ist was was du noch nicht wissen brauchst, wenn du nicht mal mit einem Stringobjekt klar kommst.

Bitte beschreib mir dein Problem genauer. Was hast du schon, was funktioniert nicht. Dann sehen wir weiter. Nicht böse gemeint, aber ich hab besseres zu tun als deine Hausaufgaben zu erledigen…

Grüße

Hallo WiF-Schülerin,

gleich mal vorneweg: Es geht vermutlich um JAVA, richtig?

Dann fangen wir mal mit ‚Variable „String“‘ an.

Sicherlich hattest du die „Klasse String“ gemeint.

Ein String ist ein spezieller Datentyp (in JAVA eine Klasse), der Text/Zeichenketten aufnehmen kann.

Man kann damit so etwas wie

String s = "Hallo Welt.";

machen, aber auch Strings verketten, z. B.:

String ss = "Wie geht es dir?";
String sss = s + " " + ss;

Dann enthält der String sss den Wert (Text):
„Hallo Welt. Wie geht es dir?“.

Beachte, dass Strings immer mit Anführungszeichen definiert werden. Ein String darf sich nicht über mehrere Zeilen erstrecken. Das hier wäre also falsch:

String s = "Hallo
Welt";

Zeilenumbrüche müsstest du so darstellen:

String s = "Hallo\nWelt";

wobei ‚\n‘ den Zeilenumbruch symbolisiert.

(Für C# gälte all das übrigens genauso.)

Hier findest du die offizielle Dokumentation zum JAVA String:
http://download.oracle.com/javase/6/docs/api/java/la…

Jetzt mache ich noch einen kleinen Ausflug zum Thema Variablen, weil es wichtig ist, die korrekte Terminologie zu verwenden, wenn man richtig verstanden werden will…

Eine Variable besteht als solche aus zwei Teilen:
Zum einen der Typ - z. B. eine Zahl (int, long, double), ein Text (String) oder auch eine komplexe Klasse - zum anderen der tatsächliche Wert. Außerdem hat jede Variable einen Namen, an dem sie im Programm erkannt wird. Beispiel:

int n = 7;

Das definiert eine Variable vom Typ int mit dem Wert 7, die im Programm mit dem Namen n angesprochen wird.

Üblicherweise wird in obigem Beispiel von der Variablen n gesprochen. Wenn du jetzt „Variable String“ sagst, wäre das eigentlich eine Variable, deren Namen „String“ ist - wobei sie nicht notwendigerweise auch vom Typ String sein muss.

Das hier wäre zulässig (da JAVA Typsystem und Namensbereich strikt trennt):

int String = 8;

Wobei das sicherlich ein irreführender Name und daher nicht zu empfehlen wäre - außerdem verletzt er die JAVA Namenskonvention, nach der Variablennamen als ‚Camel case‘ mit führendem Kleinbuchstaben zu benennen sind (Camel case: alles kleingeschrieben, bei zusammengesetzten Bezeichnern jeweils der folgende Wortanfang groß, also z. B. HalloWeltProgramm, beispielVariable, …).

Nun zu deiner Aufgabe:
Von der Beschreibung und auch vom Anspruch als Anfängeraufgabe soll das sicherlich ein Konsolenprogramm werden (für grafische Benutzerflächen, frage mich nach AWT, Swing oder SWT).

Da Arrays von fest definierter und nicht änderbarer Größe sind, musst du zuerst einmal wissen, wie groß die Arrays sein sollen.

Daher musst du dies erst einmal über die Konsole erfragen („Festlegung der Kanditatenzahl“).

Jetzt musst du natürlich zuerst einmal an die Benutzereingaben herankommen. Direkt mit System.in zu arbeiten ist recht mühsam.

Dieses Stückchen Code stellt dir einen BufferedReader bereit:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

Damit kannst du mit in.readLine() eine ganze Zeile abfragen, wäre also alles, was du bis zur Eingabe der Zeilenschaltung („Enter“) schon eingegeben hast.

Also in etwa so:

System.out.print("Anzahl der Kandidaten: ");
String countAsText = in.readLine();

Das ist aber ein reiner Text (ein Altbekannter, ein String!), also bei Eingabe von „11“ zweimal das Zeichen ‚1‘ hintereinander. Damit kann man natürlich nicht rechnen, das muss man zuerst in eine wirkliche Zahl (in diesem Fall sinnigerweise ein int) umwandeln.

Schau dir dazu mal Integer.parseInt an (JAVA Doku):

http://download.oracle.com/javase/6/docs/api/java/la…

Beachte auch, dass das eine NumberFormatException werfen kann, falls der Benutzer Zeichen eingibt, die nicht zur Darstellung einer Zahl gehören.

Anschließend erzeugst du die benötigten Arrays. Beachte hier wiederum, dass die Zahl, die der Benutzer eingegeben hat, nicht negativ sein kann.

Im Grunde müsste man die Exception mittels try - catch fangen (falls du das schon kennst), den Wert vor der Erzeugung des Arrays prüfen und ggf. mit einer entsprechenden Fehlermeldung kontrolliert das Programm beenden. Aber für einen ersten Schnellschuss solltest du durchaus darauf verzichten können.

Soviel erst mal als Starthilfe, insbesondere Strings. Bei weiteren Fragen stehe ich dir gerne zur Verfügung.

Viele Grüße,
Sandro