Javascript mit 2dimensionalem Array?

 - (Programm, programmieren, Java)

3 Antworten

  1. Die Variable Vorname ist nur im do-Block definiert, nicht in der while-Bedingung.
  2. Das Array Arr_Name ist nur eindimensional, bis Du schleifenweise Arr_Name[i] = [] definierst.
  3. Wenn i die Länge des Arrays ist, existiert Arr_Name[i] nicht, da bei Null angefangen wird zu zählen (das letzte Element hat somit das Indize length-1).
  4. Du verwendest die Variable i zweimal - einmal global als Längenvariable und einmal in der Schleife als Zählvariable. Eher ungünstig.
  5. document.write(...) solltest Du nicht mehr verwenden - eher den Inhalt eines HTML-Elements ändern oder, wenn es nur eine Testausgabe sein soll, console.log(...) verwenden.
  6. Die Länge des Arrays ist an der Stelle, an der Du sie abrufst, gleich 0, da noch keine Elemente enthalten sind.

Ein funktionierendes Script wäre beispielsweise dieses:

var vorname = "";
var nachname = "";
do {
  vorname = prompt("Gib einen Vornamen ein.");
  nachname = prompt("Gib einen Nachnamen ein.");
} while(vorname != "");

var arr_name = [];
for(var i=0; i<2; i++) arr_name[i] = [];
var len = arr_name.length;
arr_name[len-1][0] = vorname;
arr_name[len-1][1] = nachname;

for(var i=0; i<len; i++)
    for(var j=0; j<2; j++) console.log(arr_name[i][j]);

Das wäre nun zumindest syntaktisch korrekt - über die Ästhetik und vor allem den Sinn des Codes lässt sich nach wie vor streiten.

Beispielsweise:

  • warum eine do-while-Schleife am Anfang des Codes?
  • warum ein mehrdimensionales Array für zwei Datenelemente?
  • ...

LG

Woher ich das weiß:Berufserfahrung – Software-Entwicklung

Mit .length bekommst du die Länge deines Arrays. Also wenn ein Array 2 Elemente beinhaltet, bekommst du die Zahl 2. Allerdings ist bei einem Array mit 2 Elementen der größte Index 1!
arr[0] = Element1;
arr[1] = Element2;

Auf deiner Variable i würde aber wegen der Länge 2 stehen, da es diesen Index nicht gibt, funktioniert es nicht. Lösung

Arr_Name[i-1][0]=Vorname;  

Bitte achte auch auf die Coding Conventions, man schreibt keine Variablen groß!


Win7User  29.04.2018, 22:02
[...] man schreibt keine Variablen groß!

Und warum bitte nicht!?

Vielleicht, weil sie oft für Prototype-Methoden genutzt werden oder hast du auch einen Grund dafür??

Falls du einmal sehen willst, wie viele Zeichen in Variablen erlaubt sind, solltest du einmal auf dieser Seite vorbeigucken!

0
agent888  29.04.2018, 22:25
@Win7User

Danke dir, dass du mir ne Seite verlinkst, auf der ich nachsehen kann, welche Zeichen erlaubt sind. Allerdings programmiere ich schon mehrere Jahre und kann dir garantieren, dass ich sehr gut weiß, was man als Variablenname verwenden KANN. Und nun zur Begründung warum man sie nicht groß schreibt: Nicht weil es nicht geht, sondern weil man es schlicht und ergreifend nicht macht. Das hat sich so eingebürgert und man nennt es Coding Convention. Das hat nichts mit funktionieren zu tun, sondern ist einfach schlechter Programmierstil.

0

Das hier ist dein Code:

var vorname, nachname
do {
  vorname = prompt('Gib deinen Vornamen ein');
  nachname = prompt('Gib deinen Nachnamen ein');
}
while(vorname !== '' && nachname !== '');

var personen = [];
var i = personen.length;

personen[i][0] = vorname;
personen[i][1] = nachname;

for(var i = 0; i < personen.length; i++)
  for(var j = 0; j < 2; j++) document.write(personen[i][j]);

Ich habe deine Variablen einmal umbenannt und unnötige Kontrollstrukturen gelöscht. Der Code ist aber noch der gleiche.

Dein Fehler ist hier:

personen[i][0] = vorname;
personen[i][1] = nachname;

An dieser stelle ist personen[i] noch nicht initiiert (personen[i] === undefined). Falls du diese Konstellation also lassen willst, musst du vor diesen Anweisungen personen[i] noch als Array initiieren. Das geht - wie du sicher weißt - so:

personen[i] = [];

Das schreibst du also einfach davor und es sollte funktionieren.

Wenn du aber eine konstante Anzahl Werte hast, die du speichern musst, wäre es praktischer, das mit einem Objekt zu machen. Das könnte dann so aussehen:

{
  firstName: 'vorname',
  lastName: 'nachname'
}

Das fügst du dann einfach mit Array.prototype.push() in das Personen-Array ein:

personen = [];
personen.push({
  firstName: vorname,
  lastName: nachname
});

Wenn du die Personen dann auslesen willst, ist es auch einiges übersichtlicher:

for(var i = 0; i < personen.length; i++)
  document.write(personen[i].firstName + '<br>' + personen[i].lastName);

So kann man auf den ersten Blick sehen, was überhaupt durchsucht wird und was ausgegeben wird. Hier noch einmal der ganze Code, wie ich ihn abgeändert hätte:

// Namen herausfinden
var vorname, nachname;
do {
  vorname = prompt('Gib deinen Vornamen ein');
  nachname = prompt('Gib deinen Nachnamen ein');
}
while (vorname !== '' && nachname !== '');

// Personen-Array initiieren
personen = [];

// Namen eintragen
personen.push({
  firstName: vorname,
  lastName: nachname
});

// alle eingetragene Namen ausgeben
for(var i = 0; i < personen.length; i++)
  document.write(personen[i].firstName + '<br>' + personen[i].lastName);