Hallo zusammen.
Ich hab irgendwie einen völligen Black Out und weiss nicht mmehr wie ich in java einen Text ausgebe, indem noch eine Variable ist.
Gemeint ist sowas:
z.b. hab ich eine variable:
zahl= x+y+z; (in unserem Fall sagen wa mal zahl =18)
jetzt schreibe ich:
stift.schreibe ("Hallo, ich habe gerade ..... € auf meinem Konto.");
jezt muss an die ....... die variable hin.
Könnt ihr mir sagen wie das nochmal geht.
neues problem:
Meine Programm funktioniert irgendwie nicht richtig, jedoch weiss ich nicht warum
Also aufgabe war:
Im Mittelalter gab es viele Gefängniszellen.
In einer Burg gab es 1000 Zellen mit 1000 Häftlingen und an jeder Zelle steht 1 Wärter.
Einmal im Jahr gehen alle Wärter durch alle Zellen und öffnen oder schließen diese Zellen.
Jeder Wärter fängt bei seiner Zelle an und geht in bestimmten schritten. Also fängt der erste Wärter bei Zelle 1 an und der 20ste Wrter fängt bei Zelle 20 an.
Anfangs sind alle Zellen zu!
der 1. Wärter geht immer 1 Zelle weiter und macht diese auf.
Der 2. Wärter geht in 2er Schritten und macht die Zelle auf (falls sie zu ist) oder macht sie zu (falls sie offen ist)
der 3. Wärter geht in 3er Schritten und macht die Zellen auf (falls sie zu ist) oder macht sie zu (falls sie offen ist)
der 4. Wärter geht in 4er Schritten .......
Das geht so weiter bs zum 1000 Wärter .
Dann die offenen Türen zählen.
ich habs versucht einigermaßen sinnvoll zu programmieren.
Code:
package blablabla
import stiftUndCo.*;
public class ZellenAnwendung
{
private Bildschirm bildschirm;
private Stift stift;
boolean[] zellen;
int n=1000;
int zahl=0;
public ZellenAnwendung()
{
bildschirm= new Bildschirm();
stift=new Stift();
n=n+1;
zellen= new boolean[n];
} //Konstruktor
public void zellenSchließen ()
{
for (int x=1;x<=1000;x++)
{
zellen[x]=false;
} //for
} //zellenSchließen
public void waerterMachen ()
{
for (int i=1;i<=1000;i++)
{
for (int y=i; y<=1000;y=y+i)
{
zellen[y]= !zellen[y];
} //for "Zähler"
} // for "Wärter"
for (int tuer=1;tuer<=1000;tuer++)
{
if (zellen[tuer]=true)
{
zahl=zahl+1;
} // if
} // for Türen zählen
stift.bewegeBis (100,100);
stift.schreibe("Es sind"+zahl+"Türen offen");
} // waerterMachen
public void fuehreAus ()
{
zellenSchließen ();
waerterMachen ();
} //fuehreAus
} //Zellen
wenn ich das programm laufen lasse, kommt als antwort das 1000 Zellen offen wären, aber das kann nicht sein, da wenn wärter 1 alle türen aufmacht, und wärter 2 seine wieder schließt kommt kein anderer wärter an zelle 2 vorbei und die Zelle wäre ja dann schonmal zu. Deshalb kann das mit 1000 gar nicht stimnen.
a) Der für das falsche Ergebnis vermutlich verantwortliche Code-Teil ist deine If-Abfrage ob die Zelle offen ist:
if (zellen[tuer]=true)
Du hast hier ein einzelnes "=". Das ist eine Zuweisung, kein Vergleich. richtig muss es if (zellen[tuer] == true) heißen
b) Arrays beginnen normalerweise immer bei Index 0. Du erstellst das zellen-array mit
zellen= new boolean[n];
wobei du vorher n = n+1 machst, damit du dein array von 1 bis 1000 ansprechen kannst. Solltest du länger/mehr in Java programmieren (oder in einer anderen Sprache in der das so ist), solltest du dich daran gewöhnen dass du mit einem new boolean[1000] von 0 bis 999 gehst und das maximal in der Ausgabe berichtigen. Das Array größer anlegen damit man bei 1 anfangen kann zu zählen ist etwas unsauber und wird maximal in Ausnahmefällen gemacht, die genau sowas erfordern (streng genommen ist es nie notwendig).