Transkripte
1. EINFÜHRUNG: Java ist eine der am einfachsten zu erlernenden
Programmiersprachen eignet sich
daher perfekt für Anfänger. In diesem Kurs führe ich
Sie Schritt für Schritt durch Programmierung und
Java. Am Ende dieses Kurses erstellen
Sie mit Java zu echten
Programmen. Und Sie haben ein
solides Verständnis der Grundlagen
und Grundlagen der Programmierung. Ofenprogrammierung in
Java seit 2011. Und ich benutze sogar Java, um
mein eigenes
Startup für Gameserver zu erstellen , und 14, ich habe einige
Jahre lang ein Vollzeiteinkommen aus ich habe einige
Jahre lang ein Vollzeiteinkommen aus
seinem Projekt erzielt, bevor ich es verkaufte. Ich habe also viel Erfahrung
mit Java und
freue mich darauf, mein Wissen während dieses Kurses
mit Ihnen zu
teilen .
2. Installieren von IntelliJ: Bevor wir Java lernen können, brauchen
wir einen Ort, an dem wir unseren Code
tatsächlich schreiben und ausführen können . Dies wird als IDE bezeichnet, die für Integrated
Development Environment steht. Das ist eine super ausgefallene
Art zu sagen, dass es sich einen Texteditor handelt, der Ihren Code auch in
ein echtes Programm
umwandelt. Jetzt wird der
Industriestandard für IDEs und Java
als Intelligenz bezeichnet. So können Sie einfach einfach intelligenten
Google herunterladen. Dies ist eine freie Software. Klicken Sie hier auf
den oberen Link
und stellen Sie sicher, dass Sie Community Edition
auswählen. Und sie wählen auch das richtige
Betriebssystem aus, auf dem Sie sich befinden. Ich bin unter Windows, was der Standardwert
ist. Also bleibe ich
hier auf der Windows-Registerkarte. Ich kann dann auf Download klicken. Und dein Download sollte beginnen. Und bei den meisten Browsern
müssen Sie
zustimmen , dass Sie diese Datei herunterladen
möchten. Sobald der Download abgeschlossen ist, können
Sie direkt hier darauf klicken. Hier haben wir den
eigentlichen Installer. Dies ist ein ziemlich
Standardinstallationsprogramm. Nun, du klickst einfach etwa 800
Mal auf
Weiter und dann
solltest du loslegen. Ich gehe einfach durch und behalte alles hier, die Standardeinstellung. Und dann werde ich die
Aufnahme pausieren , während die
Installation stattfindet. Nach der Deinstallation können
wir hier auf dieses
Kontrollkästchen klicken
und dann schließlich auf Fertig stellen
klicken. Sobald Sie es geöffnet haben,
sollten Sie auf
eine ähnliche Seite gesendet werden . Sie möchten auf Neues Projekt
klicken. Jetzt
möchten Sie auf dieser Seite sicherstellen, dass Sie oben Java ausgewählt haben. Das sollte der Standardwert sein. Und für das Projekt-SDK können
wir fortfahren und
den Standardwert auswählen. Wenn Sie jedoch keinen Standardwert sehen, können
Sie ein JDK herunterladen. So können wir darauf klicken und Sie können die gewünschte
Version auswählen. Jede Version sollte es tun. Wir
werden nichts tun. Das ist ein sehr
versionsabhängiger Prozesskurs. Klicken Sie einfach auf Download. Angenommen, Sie haben
bereits ein SDK, können
wir einfach auf
Weiter und dann wieder auf Weiter klicken. Und dann können wir endlich
einen Weg zu unserem
Projekt und einen Namen geben . Wir können hier auf die drei
Punkte klicken, um zu stöbern. Ich wähle hier meinen
Java-Ordner und
erstelle einen neuen Ordner. Dieser wird als
Workspace bezeichnet. Hier drin. Ich wähle
es einfach aus und klicke dann auf Okay. Jetzt ist der Projektname
standardmäßig Workspace. Das ist in Ordnung. Ich fahre
weiter und klicke auf Fertig stellen. Jetzt ist intelligent endlich offen. Auf der linken Seite
haben wir dieses Projekt , das wir durch Klicken umschalten können. Dies
zeigt alle Dateien und Ordner in
unserem Workspace an. Jetzt wird überall sonst in diesem riesigen Panel hier unser Code angezeigt. Aber wir haben momentan keinen
Code geöffnet. Aber jetzt, da die Intelligenz
erfolgreich installiert wurde, können
wir mit dem nächsten Video Code schreiben .
3. Hallo Welt: Wir sind jetzt bereit, endlich
an unserem allerersten Java-Programm zu arbeiten . Und es ist
üblich, den Text
Hello World einfach
als erstes Programm auf den Bildschirm zu drucken , egal welche Sprache oder welches Lernen das hier
fortsetzen wird, navigieren Sie
zum Quellordner. Und hier müssen wir einen
neuen Ordner darin erstellen. Sie können mit der rechten Maustaste klicken, zu
Neu gehen und Paket auswählen. Ein Paket ist im Grunde
nur ein Ordner. Und ein Java-Programmierer
verwendet Pakete, um alle
Ihre Codedateien zu organisieren. Sie können mehrere
Codedateien innerhalb von Paketen haben und Sie könnten mehrere Pakete
in Ihrem Projekt haben. Im Moment
arbeiten wir nur in einem Paket zusammen. Also mach weiter und klicke hier mit der linken Maustaste. Wir müssen jetzt einen Paketnamen eingeben
, und dies muss eindeutig sein. Jetzt ist es üblich, eine umgekehrte Domain
zu verwenden. Zum Beispiel
com.google.com.YouTube. Aber offensichtlich sollte dies nicht eine der beliebtesten Domains
sein, sondern Ihre eigene Domain. Und wenn wir keine Domain besitzen, sich
keine Sorgen, das müssen Sie nicht. Sie können technisch gesehen alles
eingeben, was Sie wollen. Aber um zum Beispiel den
Standard-Namenskonventionen zu folgen , machen
wir etwas wie com dot alex dot Flores oder so
etwas anderes. Offensichtlich hat das meinen
Namen und du könntest
deinen eigenen Namen benutzen , wenn du willst oder etwas komplett erfundenes. Ich nenne dieses Paket genau
die Domain, die ich besitze. So zum Beispiel Com
Dot abgenutzte Schlüssel. Wenn ich nun die Eingabetaste drücke, sehen wir, dieser Ordner genau hier
erstellt wurde. Jetzt kann ich hier meine eigene Datei
erstellen, damit ich mit der rechten Maustaste klicken und zu einer neuen Java-Klasse
wechseln kann. Und hier haben wir ein
paar verschiedene Möglichkeiten. Wir bleiben
bei einer Standardklasse. Ich erkläre den
Unterschied zwischen all diesen in zukünftigen Videos. Der Klassenname, den ich diesen Hello World
nennen werde, mit einem Kapital H und einem
Kapital W und ohne Leerzeichen. Es ist sehr wichtig, dass keine
dieser Dateien
Leerzeichen in ihrem Namen hat. Sobald Sie die
Eingabetaste gedrückt haben, haben Sie hier
ein paar Codeabschnitte
geschrieben. Wenn Sie diesen Ordner erweitern, sehen
Sie jetzt die Hallo
Weltklasse genau hier. Jetzt werden die Details dessen, was jedes
dieser Dinge tut, in einem zukünftigen Video
behandelt. Im Moment werden wir diesen vorhandenen Code einfach
hinzufügen. Wenn Sie nun genau hier auf
diese öffnende geschweifte
Klammer klicken , können
Sie die Eingabetaste drücken und Sie können feststellen, dass wir
automatisch mit der Registerkarte versehen sind. Und sobald sie jetzt tabbing, ist
es in
jeder
Programmiersprache sehr wichtig , da Ihr Code
dadurch viel
einfacher zu lesen ist. Und der Vorteil
davon wird später viel
deutlicher , sobald wir viel größere Dateien
haben. Aber im Moment müssen wir uns keine Sorgen
um große Dateien machen. Unser Ziel ist es gerade, den Text Hello
World auf den Bildschirm zu
drucken. Ich schreibe jetzt einen Code. Geh weiter und folge
mir mit und schmeiß diesen Kurs. Wir werden verstehen,
was jeder Teil dieses
Codes bewirkt. Aber das meiste davon wird
derzeit nicht erklärt werden. Zu Beginn kann ich sagen, dass
öffentliche, statische, nichtig, Haupt- und dann Klammern und Endklammern
automatisch generiert werden sollten. Und danach können wir
ein Leerzeichen und dann eine geschweifte Klammer setzen , und ähnlich den
Klammern wird
automatisch die
endende geschweifte Klammer generiert. nun zwischen den
beiden geschweiften Klammern drücken, wenn Sie die Eingabetaste oder C drücken, gab es auch noch einmal
Tabbed End. Wir müssen zurück in
die Klammern gehen und Zeichenfolge mit einem großen
S-Raum
eingeben. Dann werden eine eckige Klammer und eine eckige
Endklammer hinzugefügt. Und dann können wir Bögen eintippen. Jetzt haben wir gerade viel Code geschrieben und das meiste davon sieht für Sie
sehr verwirrend aus. Mach dir darüber überhaupt keine Sorgen. Solange dein Code
so aussieht und es
nirgendwo rote, scharfe Zeilen gibt,
kannst du loslegen. Und meine roten, schnörkeligen Linien habe ich so etwas gemacht. Hier sehen wir diese rote
Schnörkellinie genau hier. Dies ist eine Intelligenz,
um uns mitzuteilen , dass unser Code einen
Fehler enthält. Wir bewegen den Mauszeiger darüber.
Es wird sagen, dass eine endende
Klammer wie erwartet ist. Also kann ich hier einen hinzufügen, und dann verschwindet dieser Fehler. Wenn Sie gerade verwirrt
sind, machen Sie sich keine Sorgen, alles wird erklärt, während wir
den gesamten Kurs fortsetzen. Der nächste Schritt wird
ihr jedoch jetzt erklärt, unser Ziel ist es,
etwas auf die Konsole zu drucken. Wir können dies tun, indem wir ein
System mit einem Kapital S, Dot Out, Dot Print LN eingeben. Wir können eine Klammer hinzufügen und es werden
automatisch
eine Endklammer hinzugefügt. Darin können wir
ein doppeltes Zitat hinzufügen und
ähnlich wie alles andere, und das endende
Doppelzitat wird hinzugefügt. Jetzt haben wir
am Ende einen Fehler hier. Wenn ich den Mauszeiger darüber fahre, sehen
wir, dass ein Semikolon erwartet wird. Ich kann einen hinzufügen und hier,
ähnlich einem Punkt mit einem englischen Satz,
beendet Semikolon eine Anweisung oder
einen Java-Satz. Am Ende der meisten Zeilen fügen
Sie ein Semikolon hinzu. Und Sie haben vielleicht bemerkt
, dass wir hier in Zeile sechs oder sieben kein
Semikolon haben . Der Grund dafür
wird später erläutert. Aber im Allgemeinen sollten
die meisten Codezeilen, die Sie schreiben
werden, am Ende
ein Semikolon haben. In diesen
doppelten Anführungszeichen können
wir den gewünschten
Text hinzufügen. Und während wir
zum Beispiel auf die Konsole gedruckt haben , kann ich Helloworld
hinzufügen. Dann kann ich von hier aus oben zu Run
gehen, denn dann klicke hier
auf Run. Alternativ können Sie
eine hier angezeigte Verknüpfung verwenden. Wir kriegen dieses Pop-Up genau hier. Wir wollten
auf Hello world klicken. Und jetzt sehen wir, dass
es sich baut. Jetzt können wir einfach hier
auftauchen. Ich werde
diese Höhe senken , nur damit ich
mehr Platz habe , um mit dem Code zu arbeiten. Aber wir sehen den
Text Hello world, und dass der Prozess
mit einem Exit-Code von 0 abgeschlossen wurde. Die 0 einer Führungskraft bedeutet
im Grunde, dass alles gut gelaufen ist und
es keine Probleme gab. Wenn wir
möchten, können wir
verschiedene
Ausrufezeichen innerhalb der Zeichenfolge hinzufügen . Und anstatt
all diese Dropdowns hier zu durchlaufen, können
wir einfach auf
diesen grünen Pfeil
oben rechts klicken . Oder Sie können die Umschalttaste plus
F2 drücken, je nachdem, was Sie bevorzugen. Wenn ich darauf klicke,
sehen wir jetzt , dass es unser Projekt
neu aufbauen wird. Und jetzt sehen wir Hello World
mit Ausrufezeichen. Danach. Sie haben jetzt Ihr
allererstes Java-Programm abgeschlossen. Ich weiß, dass ein Großteil dieses Codes gerade
sehr verwirrend aussieht, aber alles wird erklärt wenn wir weiter gehen.
4. Kommentare: Beim Programmieren können
wir nicht einfach
alles schreiben, was wir wollen, da
dies kein gültiger Java-Code ist. Und wenn ich also den Mauszeiger darüber fahre, werden
diese sagen
, dass es Fehler im Zusammenhang
mit diesem Code
geben wird. Aber manchmal
möchten Sie möglicherweise verschiedene Notizen hinzufügen oder wurden ordnungsgemäß als
Kommentare in Ihren Code bezeichnet. Dies wird Ihnen oder Ihren Mitarbeitern helfen besser zu verstehen, was innerhalb des Kodex
passiert. Zum Beispiel kann ich hier zwei
Schrägstriche machen, und dann kann ich
Hello World drucken auf der Konsole sagen. In genau diesem Beispiel möchten
wir wahrscheinlich keinen Kommentar für
diese Zeile
hinzufügen, möchten
wir wahrscheinlich keinen Kommentar für
diese Zeile
hinzufügen da die Zeile ohnehin ziemlich
selbsterklärend
ist. Aber so fügst du einen Kommentar
richtig ein. Dies hätte keine Auswirkungen auf das Programm oder das, was auf die Konsole
gedruckt wird. Es ist nur als Hinweis für andere Programmierer
und Sie selbst da. Jetzt, während wir diesen Kurs
durchlaufen, werden
Sie sehen,
was einen
Kommentar angehängt haben
sollte und was nicht. Auch hier
ist eine Zeile wie diese sehr selbsterklärend, daher müssen wir keine Kommentare
hinzufügen. Alternativ können
wir alternativ
mehrzeilige Kommentare hinzufügen, indem wir einen Schrägstrich
machen. Und dann macht ein
Endstern-Vorwärts-Schrägstrich und Intelligent
tatsächlich das Ende für uns. Hier kann ich sagen, dass
dies ein Kommentar ist. All dieser Text
hier ist ausgegraut weil er
technisch nicht Code ist, sondern ein Kommentar.
5. Variablen: Wir werden jetzt
über eines der wichtigsten Konzepte sprechen ,
wenn es um
die Programmierung geht. Und das ist das
Konzept von Variablen. ob Sie sich eine
Variable als
einen Container vorstellen , der
einen Wert enthält. Arbeitsspeicher oder der Speicher Ihres Computers besteht im Grunde genommen aus einer Reihe von Regalen
, die diese Container enthalten. Jetzt hat jeder Container einen Namen und der darin enthaltene Wert kann jederzeit gelesen
oder geändert werden. Erstellen wir zum Beispiel eine ganze Zahl, die im Grunde
nur eine ganze Zahl ist. Ich kann „int space“ sagen. Und jetzt müssen wir unsere Variable
nennen. Dies sollte etwas sein
, das beschreibend ist. Wir sollten keine
Variablen namens a oder
X oder solche Dinge haben , die
nicht sehr beschreibend sind. In diesem Fall möchte ich, dass dies
mein aktuelles Alter hält. Also gebe ich das Alter ein. Also nenne ich dieses variable Alter. Du kannst es im Grunde
alles nennen, was du willst. Aber es gibt einige Regeln, die ich später
in diesem Video durchgehen werde. Danach fügen wir
ein Gleichheitszeichen hinzu. Und nach dem Gleichheitszeichen können
wir eine beliebige Zahl hinzufügen. In diesem Fall wird es 28 sein. Und schließlich müssen
wir in
einem Semikolon hinzufügen , was hier
eigentlich passiert? Nun, der int wird Java
im Grunde sagen, dass wir eine Variable erstellen
möchten, und dies wird
einen ganzzahligen Werttyp enthalten. Es gibt verschiedene
Werte von Variablen, die
gespeichert werden können , und wir werden diese
später im Video behandeln. Jetzt
braucht jede Variable seinen eigenen Namen. In diesem Fall geben wir
ihm den Namen des Alters. Danach haben wir
ein Gleichheitszeichen, das technisch
als Zuweisungsoperator bekannt ist. Dies nimmt den
Wert auf der rechten Seite und weist ihn der
Variablen auf der linken Seite zu. Und dann
haben wir natürlich das Alter und Sie können hier jede gewünschte
Zahl hinzufügen. Es könnte 999 sein, es könnte 0 sein, es könnte negativ fünftausend sein. Jede ganze Zahl wird funktionieren. Aber der Einfachheit halber werde
ich nur mein aktuelles
Alter hinzufügen, das 28 ist. Was können wir also eigentlich mit dieser Variablen
machen? Nun, das grundlegendste,
was wir tun können, ist wahrscheinlich, es auf der Konsole
auszudrucken. Anstatt jedes Mal
system.out.print-Zeile auszuschreiben, gibt uns
Intelligenz tatsächlich eine Abkürzung ,
da dies eine ziemlich
lange Codezeile ist, die geschrieben werden muss. Also kann ich S0
UT für das System heraus eingeben. Wenn ich die Eingabetaste drücke, wird diese Codezeile
automatisch für uns generiert. Jetzt werden
die doppelten Anführungszeichen nicht generiert und
das ist beabsichtigt. Wenn ich
die doppelten Anführungszeichen
und dann das Alter hinzufügen würde, in dem
wir dieses Programm ausführen, sehen
wir einfach das Wort
Alter und unsere Konsole. Aber das wollen wir nicht. Wir möchten den Wert
innerhalb der Altersvariablen sehen. Wir müssen
diese doppelten Anführungszeichen entfernen, damit kein
sogenannter String angezeigt wird. Eine Zeichenfolge ist im Grunde wie ein Satz oder eine
Sammlung von Zeichen,
etwas, das einige tatsächliche Texte
ausmacht. Jetzt ohne die Anführungszeichen wird
es versuchen, den Wert innerhalb
der Altersvariablen zu referenzieren . In diesem Fall wird es in den
zuvor
erwähnten Container gelangen , und es wird den Wert von
28 herausziehen und ihn dann
an den Kunden senden. Binde uns wieder weit. Wir sollten jetzt 28 in
der Konsole sehen , wie
wir es hier tun. Das ist ein Beispiel dafür, was
wir mit Variablen machen können. Wir können auch einen Wert neu zuweisen. Nehmen wir zum Beispiel an,
ich habe Geburtstag, ich könnte sagen, dass Alter gleich
29 mit einem Semikolon ist. Beachten Sie, dass ich
das int nicht genau hier benutze. Wenn ich das mache, liegt
ein Fehler vor. Wenn ich den Mauszeiger darüber fahre, heißt
es, dass das variable Alter
bereits definiert wurde. Im Grunde ist der int nur da, wenn wir die Variable
erstellen. Aber nachdem es erstellt wurde, können
wir
diesen Wert immer noch ändern , indem wir
einen Wert wie diesen neu zuweisen. Um dies zu beweisen, kann ich das auf die Konsole
drucken. Also OUT, ich könnte das Alter ausdrucken. Und wenn ich das mache,
sehen wir jetzt 28 und auch 29300. Eine Ganzzahl ist also
nur eine ganze Zahl, aber es gibt verschiedene
andere Arten von Variablen. Wenn ich zum Beispiel all das
lösche, kann
ich jetzt sagen, dass String mit
einem großen S Namen Alex entspricht. Und beachte, wie ich Schnelligkeit
innerhalb von doppelten Anführungszeichen bin. Wenn ich hier einfach Alex sagen würde, würde
es denken, dass
wir nach einer
Variablen mit diesem Namen suchen ,
aber es gibt keine. Um Java mitzuteilen, dass wir mit einer
Zeichenfolge wie einem Satz
oder einer Nachricht
arbeiten Zeichenfolge wie einem Satz , einer Art Text. Dann fügen
wir unsere doppelten Anführungszeichen hinzu. Java wird nicht nach
einer Variablen namens Alex suchen, sondern wir behandeln
dies als eine Textzeichenfolge. Jetzt können wir
das natürlich auf die Konsole stellen. Ich kann den Namen ausdrucken. Und wenn ich das durchführe,
sehen wir Alex in der Konsole. Es gibt jedoch viele
andere Variablentypen. Zum Beispiel haben wir einen booleschen Wert. Der boolesche Jeff repräsentiert
entweder einen wahren oder einen falschen Wert. Das ist alles was es tut. So kann
ich zum Beispiel hier sagen, dass Programmierung
gleich wahr ist. Jetzt ist true nicht in Anführungszeichen, da dies
technisch gesehen keine Zeichenfolge ist. Wahr oder falsch, was
die einzige andere Option
für einen booleschen Wert ist , sind technisch gesehen
Schlüsselwörter in Java. Wir können
sie einfach in unseren Code schreiben. Wenn das zum Beispiel stimmt, kann
ich jetzt programmieren. Wenn ich das jetzt ausführe, sollten wir in der Konsole wahr
sehen. Natürlich können
wir, genau wie ganze Zahlen, Wertstudien neu zuweisen. Ich kann also sagen, dass
Programmierung gleich falsch ist. Und wenn ich das ausführe, sehen
wir
jetzt False in der Konsole. Jetzt
lösche ich diese Zeile hier. Und du merkst vielleicht, wie
ich seine Programmierung genannt habe. Ich habe ein Kleinbuchstaben
I und ein Kapital P. Innerhalb von Variablennamen können
wir keine Leerzeichen haben. Wann immer wir also
mehrere Wörter haben, ist
es üblich, etwas
zu verwenden als CamelCase Notation
bekannt ist. Notation von Kamel
ist, wenn ein Wort
geschrieben wird , wobei der
allererste Großbuchstabe stattdessen Kleinbuchstabe ist. Aber dann hat jedes Wort
danach am Anfang einen
Großbuchstaben. Dies macht es sehr einfach, ohne Leerzeichen zu
lesen. Vergleiche das mit der Notation des
Kamelfalls. Dies ist offensichtlich
viel schwieriger zu lesen, besonders für andere
Personen, die nur Ihren Code lesen
und ihn nicht geschrieben haben. Sie wissen also nicht
genau, was es ist. Andere Regeln betreffen
, dass Variablen keinen Namen haben können, der für die Nummer
schwer ist. Normalerweise sollten Sie dies sowieso nicht
tun, also ist das nicht sehr beschreibend. Aber wenn
Sie es aus irgendeinem Grund unbedingt möchten, können
Sie es in einem
Unterstrich hinzufügen, um zu beginnen. Es wird dann zu einem
gültigen Variablenname. Während wir
während des gesamten Kurses vorankommen, sehen
Sie weitere Beispiele für
Variablennamen, damit wir uns
eine bessere Vorstellung davon machen können , was
eine gute Namenskonvention ist. Gehen wir nun zu
anderen variablen Typen über. Als nächstes haben wir ein Zeichen, das einer Zeichenfolge ähnelt, aber nur
ein einzelnes Zeichen darstellt. Zum Beispiel kann ich
sagen, Buchstabe ist gleich a. Und diese verwenden einfache
Anführungszeichen, keine doppelten Anführungszeichen. Wenn ich hier
mehrere Charaktere hinzufügen wollte, wird
es es nicht mögen
und es wird sich beschweren. Diese verwenden also nur
ein einziges Zeichen. Wir haben auch ein Double, das einer Ganzzahl ähnelt, aber natürlich
wird dies eine beliebige Zahl sein. Es muss nicht nur eine ganze Zahl sein. Zum Beispiel beträgt das Alter 28,5. Dies wäre ein gültiges Double, aber ich verwende denselben Namen
wie eine vorhandene Variable. Also
sage ich das Alter als doppelt. Das ist eine andere
Regel für die Benennung ist , dass jeder Name eindeutig sein
muss. Sonst würde es nicht wissen , auf welche Variable Sie
genau verwiesen haben.
6. Benutzereingabe: Bisher haben wir gerade
Dinge auf die Konsole gedruckt. Aber was wäre, wenn wir Beiträge
von den Benutzern erhalten wollten , die Ihr Programm
verwenden? In diesem Fall
wären es nur wir. Aber was ist, wenn wir
bestimmte Zahlen oder
Namen oder andere Dinge
wie diese eingeben bestimmte Zahlen oder
Namen oder andere Dinge und
sie tatsächlich in
unserem DAW-Programm
verstehen lassen wollen. Um dies zu tun, werden
dies ein
paar Konzepte sein. Es wird etwas
verwirrend und
sehr außerhalb
des Umfangs dieses Videos hier sein. Dies sind Konzepte, die später
im Kurs
erklärt werden , aber sie sind jetzt viel zu kompliziert,
um sie zu erklären. Also mach weiter und
codiere mit mir und sei dir bewusst, dass diese später erklärt
werden. Beginnen wir also damit,
etwas zu machen, das als Scanner bekannt ist. Dies wird verwendet, um
Input in unserer Konsole zu empfangen. Also kann ich Scanner mit einem
Kapital S sagen, ich drücke Enter. Wir werden jetzt den Scanner
importieren. Dies ist etwas, das
in Java integriert ist, aber um
es in dieser Datei verwenden zu
können, müssen wir
diesen gesamten Code in diese Datei importieren. Das ist es, was diese Linie
genau hier bewirkt. Jetzt haben wir einen Scanner erstellt , der den Variablen
ähnelt, die wir im letzten Video
angesehen haben. Wir müssen dem einen Namen geben. Ich nenne diesen Input. Dann können wir einen
Zuweisungsoperator oder
ein Gleichheitszeichen verwenden , um diesem
einen neuen Wert zuzuweisen. Nun wird dies
etwas sein, das
später
im Kurs viel ausführlicher erklärt wird . Aber im Moment mach einfach
weiter und codiere mit. Hier. Ich sage neuen Space Scanner mit einem Kapital S und danach
Klammern. Jetzt bekomme ich diesen Fehler hier. Wenn ich den Mauszeiger darüber fahre,
kann der Konstruktor Scanner nicht auflösen. Auch hier wird das Konzept
eines Konstruktors und warum
dieser Fehler auftritt
, in einem zukünftigen Video behandelt. Aber lasst uns vorerst
in die Klammern gehen, es
sei denn, fügen Sie ein System mit einem
großen S-Punkt n hinzu. Dies sollte den Fehler
beseitigen. Jetzt sind wir
bereit,
Eingaben von der Konsole zu erhalten . Fangen wir mit
einer einfachen Zeichenfolge an. Zum Beispiel kann ich sagen, dass der
String-Name als nächstes dem Eingabepunkt entspricht. Und dies wird standardmäßig
eine Zeichenfolge zurückgeben. Dann kann ich die
Namen der Konsole ausdrucken. Also OUT und Name. Und stellen wir sicher, dass der
Benutzer weiß, was zu tun ist. Ich kann S OUT sagen, dann kann ich mitmachen. Bitte gib deinen Namen ein. Wenn ich das jetzt ausführe, sehen
wir
bitte den vorderen Namen, aber er
schließt nicht sofort wie Daten und andere Situationen
warten hier tatsächlich darauf, dass wir unseren Namen
eingeben. In diesem Fall füge ich einen Alex hinzu, und wenn ich die Eingabetaste drücke, druckt er
Alex. Und hier heißt es, dass
ein Prozess abgeschlossen ist. Die grünen Texte werden die
Texte sein, die ich eingegeben habe, und der weiße Text wird
von einem Java-Programm selbst stammen. Wenn ich das jetzt noch einmal ausführe, habe ich meinen vollständigen Namen hinzugefügt. Zum Beispiel
Alexander-Raum Flores. Wenn ich das durchführe, sehen wir jetzt
nur Alexander. Das liegt daran, dass die nächste
Funktion hier
jedes einzelne Zeichen
bis zu einem bestimmten Leerzeichen zählt . Wenn es also ein
Leerzeichen oder eine Registerkarte oder eine neue Zeile gibt und solche
Dinge werden es schaffen. Also hört es einfach auf, nach
neuen Charakteren zu suchen und
gibt einfach zurück, was er bisher gefunden hat. Wenn wir die vollständige Linie
bekommen wollten, können
wir die nächste Zeile sagen. Ähnlich wie bei Variablen
wird dies die CamelCase-Notation verwenden,
was bedeutet, dass wir ein Kleinbuchstabe n
haben weil es der erste
Buchstabe des ersten Wortes ist. Aber der erste Buchstabe
jedes anderen Wortes. Zum Beispiel
wird L in Großbuchstaben sein. Wenn ich das durchführe, kann ich jetzt
meinen vollständigen Namen mit einem Leerzeichen eingeben, also Alexander Platz für uns. Und wenn ich die Eingabetaste drücke, sehen wir, die vollständige Zeichenfolge an uns
zurückgedruckt wurde. Jetzt
müssen wir nicht einfach nur Strings machen. Zum Beispiel kann ich sagen,
bitte gib dein Alter ein. Dann kann ich hier sagen, dass int
age als nächstes den Eingabepunkt gleich ist. Und hier sehen wir eine
Reihe anderer Optionen. In diesem Fall wollen wir next int, weil das unser
Variablentyp ist, der ein int ist. Dann kann ich S0 UT benutzen. Ich könnte das Alter
ohne Zitate ausdrucken. Und wenn ich das mache,
wird es uns nach unserem Alter fragen. In diesem Fall gebe ich 28 ein. Dann wird es 28 zurück an uns drucken.
7. Arithmetische Operatoren: Wenn wir Zahlen haben, möchten
wir
sie oft nicht nur auf die Konsole ausdrucken. Möglicherweise möchten wir diese Zahlen addieren,
subtrahieren , multiplizieren oder dividieren
. Zum Beispiel kann ich sagen, dass
int number gleich 50 ist. Lassen Sie uns damit beginnen dies
auf die Konsole
auszudrucken. Wir können einfach immer
sehen, was passiert. Jetzt werde ich das nicht ausführen
, weil es sehr offensichtlich ist,
was passieren würde. Aber nehmen wir an, wir möchten dieser Zahl eine
hinzufügen. Ein paar verschiedene
Möglichkeiten, dies zu tun. Ein Beispiel ist Zahl
gleich Zahl plus Eins. Wenn ich das jetzt durchführe, wirst du wahrscheinlich wissen,
was gedruckt wird. In diesem Fall sind es 51. Wir können zehn oder 100 oder eine
andere Art von Wert hinzufügen. Was wir für diesen Eindringling wollen. Jetzt gibt es einen kürzeren
Weg, dies zu tun. Also verwende ich den
Kontroll-Schrägstrich , um die aktuelle Zeile zu kommentieren
. Und dann sage ich
Zahl plus gleich 100. Dies ist im Grunde genau
das Gleiche
wie das , was wir hier haben, ist nur eine kürzere Möglichkeit,
einer Variablen eine Zahl hinzuzufügen. Wenn ich das ausführe, werden
wir 150 in der Konsole sehen. Wir können genau das gleiche Konzept machen , wenn es um Subtraktion geht. Anstelle von Plus habe ich Minus. Und wenn ich das ausführe, werden
wir negative 50 in der Konsole
sehen. Natürlich haben wir eine
Multiplikation. Wenn ich das also mache, sehen wir
hier 5 Tausend
und Division, die einen Schrägstrich hat. Wenn ich das durchführe,
werden wir 0 sehen. Jetzt ist die 0 hier, weil wir Zahlen
verwenden, die ganze Zahlen
sind. Wenn ich
diesen int in ein Double ändern würde, was Dezimalstellen zulässt,
würde ich das ausführen. Wir sehen jetzt 0,5. Und natürlich können all
diese Symbole für diese ursprüngliche Syntax
verwendet werden . Zum Beispiel können wir sagen,
dividieren Sie es durch 100 mal 100. So etwas
wird immer noch funktionieren. Jetzt fragen Sie sich vielleicht,
warum sollte jemand, der
diese Art von Syntax verwendet , wenn
dies nur kürzer ist? Der Hauptgrund für die Verwendung
dieser Art von
Syntax ist, dass wenn Sie mehrere Variablen
haben, dies die einzige
Möglichkeit war, Dinge zu tun. Zum Beispiel kann ich sagen, dass int
Nummer zwei gleich zehn ist. Dann kann ich sagen, dass Zahl gleich
Nummer zwei Mal 100 ist. Wir können das mit
dieser Art von Syntax hier nicht tun, da diese Art von
Syntax nur die
in diesem Fall erwähnte Variable
ändern
wird, das ist die
in diesem Fall erwähnte Variable
ändern Zahl. Jetzt lösche ich
die meisten Dinge und erstelle eine weitere Ganzzahl namens
Zahl gleich fünf. Nehmen wir an, wir
wollen eine
von dieser Variablen
mit dem, was wir gerade gesehen haben, addieren oder subtrahieren , wir könnten Zahl
plus gleich eins machen. Wenn ich das laufen würde, ist
es natürlich eine Art Arbeit. Wir würden sechs in der Konsole sehen. jedoch so üblich, eine Zahl um
eins zu erhöhen und zu
verringern Es ist jedoch so üblich, eine Zahl um
eins zu erhöhen und zu
verringern, dass die meisten
Programmiersprachen ,
einschließlich Java, dazu
eine noch kürzere Syntax haben . Dies wird als Inkrementieren
und Dekrementieren eines Wertes bezeichnet. Also kann ich Nummer plus sagen. Wenn ich das speichere,
werden wir immer noch sechs in der Konsole sehen. Dies wird
die Zahl um eins erhöhen. Wir könnten auch
Zahl minus minus machen. Wenn ich das ausführe,
werden wir vier in
der Konsole sehen , weil wir von der
ursprünglichen Nummer
subtrahieren, die in diesem Fall fünf ist. Jetzt können
die Plus- und Minuspunkte entweder der Variablen
zugewiesen werden, und sie tun etwas
andere Dinge. In diesem Anwendungsfall werden
wir
keine tatsächliche Änderung sehen, wenn
ich es ausführen würde. Und wir werden immer noch sechs in der Konsole
sehen. Aber das liegt nur daran,
wie unser Code hier geschrieben wird. Die Pluspunkte vorher oder
nachher zu haben , wird viel
klarer über den Unterschied sein. Wenn ich die Pluspunkte direkt
auf die Variable hier hinzufüge, sehe ich diesen Pinsel immer noch sechs in der Konsole. liegt daran, dass die Pluspunkte
vor dem Variablennamen zuerst die
Variable inkrementieren und dann verwenden. In diesem
Fall geben wir es
an die Druckzeilenfunktion weiter und drucken es
im Grunde auf die Konsole. Aber wenn ich danach
Pluspunkte hinzufügen würde, bedeutet
das, dass wir
zuerst
die Variable verwenden und sie
dann erhöhen werden. Wenn ich
das ausführen würde, werden
wir fünf in der Konsole sehen. Aber technisch gesehen hält
Zahl im
Speicher unseres Programms immer noch den Wert Sechs. Wir haben es einfach nicht gedruckt. Um dies zu beweisen, kann ich das noch einmal
ausdrucken. Sieh dir unsere Ausdrucknummer an. Und wenn ich das durchführe, sehen wir uns
dann 56. Das gleiche Konzept gilt genau , wenn es um Minus, Minus geht. Wenn ich das durchführe,
sehen
wir uns fünf und dann vier. Wenn ich jetzt Minus mache,
minus vorher,
werden wir natürlich 44 sehen. Das liegt daran, dass
wir zuerst die Zahl verringern und sie dann verwenden. Dann
drucken wir natürlich die Ergebnisse einfach noch einmal aus. Während wir mit
dem Kurs fortfahren, werden
Sie eine Reihe
von verschiedenen Möglichkeiten und
Instanzen sehen , in denen dies nützlich sein
wird. Vor allem, wenn es
um unser erstes Projekt geht, das ungefähr zur
Hälfte des Kurses sein wird.
8. Wenn andere: Wir sind jetzt dabei, in
ein sehr wichtiges Konzept einzutauchen , das als Control Flow
bekannt ist. Kontrollfluss ist im Grunde genommen der Ort, an
dem wir den Ablauf des
Programms
steuern können, der es erraten hätte. Und dies geschieht
am häufigsten mit etwas, das
als IF-Anweisungen bekannt ist. Im Grunde genommen, wenn etwas etwas
entspricht , werden wir
einen bestimmten Code ausführen. Sonst
denken wir vielleicht nicht an ein
Lieblingsschießspiel. Wenn Sie die Schaltfläche „Neu laden“ drücken, wird überprüft, ob Sie eine volle Magdalena
haben. Nicht Wenn du das tust, gehe
nicht in den Nachladen. Aber wenn Sie kein
vollständiges Magazin haben, wird
es neu geladen. Beginnen wir damit,
einige Benutzereingaben zu
erstellen einen Scanner zu erstellen. Ich nenne diesen Input. Ich weise den Wert des
neuen Scanners zu , der
in Systempunkt n übergeht. Jetzt, da wir
Zugriff auf dieses Eingabeobjekt haben, können
wir tatsächlich
Eingaben vom Benutzer lesen. Also werde ich sagen, dass int number
gleich Eingabepunkt nächsten int ist. Jetzt
drucke ich das einfach aus, um sicherzustellen, dass
alles funktioniert. Alles klar, Mike, und führe
das mit Shift und FTN aus. Hier erwartet
ich, dass ich eine Zahl eintrage. Ich gebe 50 ein und
dann bekommen wir 50 zurück. Alles funktioniert gut. Aber anstatt die Nummer einfach
auszudrucken, verwende
ich
eine if-Anweisung. Die Syntax für eine if-Anweisung
wäre wenn Klammer und dann eine geschweifte Klammer und eine endende geschweifte
Klammer in der nächsten Zeile. Jetzt in den Klammern
befindet sich unser Zustand. Und diese Bedingung
wird normalerweise die beiden vergleichen. Danke. Zum Beispiel kann ich
sagen, Nummer zwei Gleichheitszeichen, 52 Gleichheitszeichen sind
sehr wichtig , da
ein einzelnes Gleichheitszeichen, wie ich bereits erwähnt habe,
ein Zuweisungsoperator ist. Dies nimmt den
Wert auf der rechten Seite und weist ihn der
Variablen auf der linken Seite zu. Aber zwei Gleichheitszeichen
sind ein Vergleich. Dies wird sehen, ob
der Wert auf der linken Seite den Wert auf der rechten Seite
nennt. Ich füge
hier einen Kommentar hinzu, in dem der Vergleich steht. Was passiert, wenn diese
beiden Dinge gleich sind? Nun, das wird im Grunde ein boolescher Ausdruck
werden. Und wenn Sie sich vorher erinnern, ein Boolescher Wert
entweder wahr oder falsch, es gibt keine anderen Werte
von Boolean, die
eine IF-Anweisungen verwenden können und eine bedingte Bedingung
bewohnen im Grunde
nach einem booleschen Wert suchen wert. Lassen Sie
mich das hypothetisch
auskommentieren und lassen Sie mich einfach die Zahl 50
eingeben. In diesem Fall gibt
uns unser
Texteditor diese gelbe Warnung, indem wir den Mauszeiger darüber bewegen. Es heißt, dass die
Bedingungszahl gleich 50 ist, immer wahr ist. Offensichtlich ist das
der Fall, denn unser Wert hier liegt bei 50
und das ändert sich nie. Nun
ist der wichtige Teil dabei, dass es immer wahr ist, was ein boolescher Wert ist. Das ist also im Grunde
dasselbe wie zu sagen, ob wahr ist. Wenn dies der Fall ist, wird der Code in diesen geschweiften Klammern
immer ausgeführt. Wenn dies falsch war und der Code in den geschweiften Klammern niemals ausgeführt
wird. Die Bedingung innerhalb
der Klammern muss eine wahre Bedingung sein. Ich verwende Control Z, um die Rücktaste zu verwenden
, bis wir tatsächlich Benutzereingaben
erhalten. Und hier drin
werde ich einfach auf
die Konsole drucken und sagen, dass
die Nummer 50 ist. Jetzt werde ich hier
einige dieser Kommentare los, nur um unseren Code
ein wenig sauberer zu machen. Ich versuche
uns mit Shift und F2 zu betreiben. Und hier wird erwartet, dass
ich eine Zahl eintrage. Wenn ich 50 eintrage
, sage ich die Zahlen 50. Und wenn ich das noch einmal durchführe, gebe
ich noch etwas ein. Zum Beispiel 99. Es wird nichts drucken, weil diese Bedingung falsch ist. Daher wird der
darin enthaltene Code nicht ausgeführt. Aber was wäre, wenn wir andere Nummern überprüfen wollten
? Will theoretisch könnten wir einfach eine Reihe von if-Aussagen
hinzufügen. Zum Beispiel eine Zahl, die
genau 51. Aber was ist, wenn wir wollen, dass nur eines
auf die Konsole gedruckt wird? Jedes Mal, wenn wir eine if-Anweisung
erstellen, wird
dies etwas
schaffen, das
als if-Statement-Kette bekannt ist. Eine if-Statement-Kette. Dies wird
bis zu drei verschiedene
Arten von Aussagen enthalten . Wir haben unsere if-Aussagen, wir haben unsere else-if-Aussagen, und wir haben unsere
else-if-Aussagen. Werfen wir einen Blick auf
Else-if-Aussagen. Wenn ich diese
if-Aussage hier
loswerde, könnte ich sonst sagen, wenn die Zahl genau
gleich 51 ist, kann
ich dann ausdrucken, dass
die Nummer 51 ist. Jetzt muss eine else-if-Aussage direkt nach
einer if-Aussage
sein. Diese werden im Grunde alle
vorherigen if- und
else-if-Aussagen betrachten . Und wenn sie alle falsch sind, wird es weitermachen und versuchen,
diese beiden Werte zu vergleichen. In diesem Fall,
IF-Anweisung online 16, wird
es Nummer 50 vergleichen. Wenn das stimmt, führen
wir diesen Code aus. Und dann
springen wir gleich hier runter. Wir werden nicht einmal
versuchen, die Zahl von 251 zu vergleichen weil die else-if-Anweisung sieht, dass die
if-Anweisung wahr war. Es sieht, dass es keinen Sinn hat die beiden Werte überhaupt
zu überprüfen. Wenn wir jedoch eine
andere Zahl eingegeben haben, zum Beispiel 51, ist diese
Bedingung jetzt falsch. Die else-if-Anweisung, wir werden sehen,
dass sie dann versuchen wird, diese beiden Werte zu
vergleichen. In diesem Fall sind die beiden
Werte identisch. Also diesen Code haben wir ausgeführt,
aber wenn ich 52 eingebe, wird hier
nichts Rampe sein. Um dies zu beweisen, kann ich unser
Programm ausführen. Ich kann 50 betreten. Hier sehen wir die Zahlen
50, fremde laufen es wieder. Ich kann eine 51 eingeben, und hier sehen
wir, dass die Zahl 51 ist. Endlich kann ich
es ausführen und ich kann
52 eingeben und nichts passiert. Jetzt können
wir für jede IF-Anweisungskette zum Beispiel genau hier zum Beispiel genau hier nur
eine if-Anweisung haben, aber so viele
else-if-Aussagen, wie wir wollen. Zum Beispiel kann ich sonst sagen, wenn die Zahl genau
52 ist, könnte
ich dann
ausdrucken, dass die Zahl 52 ist. Und um die Dinge
etwas interessanter zu machen, kann
ich sagen, dass die f-Zahl sonst genau gleich 52
ist. Auch hier konnte ich den
Test nicht ausdrucken, nur um sicherzustellen, dass diese Druckanweisung ganz
anders ist als die anderen. Wenn ich das ausführe,
gebe ich 52 in die Konsole ein. Wir sehen jetzt, dass die Zahl für die beiden
ist, aber wir sehen keinen Text. Das liegt daran, dass diese
Bedingung hier wahr war. Daher
wird sich diese
else-if-Anweisung nicht einmal die
Mühe machen,
diese beiden Werte zu vergleichen , und
wird sicherlich nichts innerhalb der geschweiften Klammern
ausdrucken. Jetzt beschwert
sich unsere IDE natürlich, weil diese beiden Dinge
nicht wirklich hier sein sollten. Diese Aussage
hier wird eigentlich nie ausgeführt werden, egal was passiert. Denn wenn die Zahl 52 ist, dann
haben wir diesen Code
hier in Zeile 21 stattdessen ausgeführt, weil unser Zustand online
20 wahr sein wird. Ich entferne das. Und das Letzte, was
ich
dir zeigen wollte , ist die andere Aussage. Dies muss ganz am
Ende einer if-Statement-Kette liegen. Dies ist im Grunde
nur ein Catch-All. Wenn zum Beispiel nichts anderes in der
if-Anweisungskette wahr
war, kann
ich eine unbekannte
Nummer ausdrucken und ich kann diese ausführen. Und wenn ich 5352 eintrete, wissen
wir, was passieren wird. Aber was passiert, wenn ich 53 eintrete? Es sagt unbekannte
Nummer, weil alle drei dieser if-Anweisungen
genau hier oder falsch sind, daher die
else-Anweisung, die wir ausgeführt haben. Aber wenn ich das ausführen würde
und 52 eingeben möchte, heißt
es, dass die
Nummer für die beiden ist. Und die else-Anweisung wird
nicht ausgeführt, weil sie sieht oder eine der vorherigen f- oder
else-if-Aussagen wahr war. Grundsätzlich wird
das Programm all dies durchlaufen und versuchen, die
ersten wahren Aussagen zu finden und den Rest zu ignorieren.
9. Switch-Statements: Im letzten Video haben wir uns if-Anweisungen angeschaut, aber das ist nur ein
Beispiel für Steuerfluss. Ein anderes Beispiel
wird etwas sein, als Switch-Anweisung
bekannt ist. Jetzt wird dies weniger häufig wie Anweisungen
verwendet, aber Sie werden es
von Zeit zu Zeit sehen. Es ist also wichtig zu
verstehen, wie es funktioniert. Ich kann einfach sagen, dass Klammern
wechseln und danach
geschweifte Klammern. Jetzt werden
Antikörperklammern ein Wert sein, nicht unbedingt eine Bedingung, sondern jede Art von Wert. Zum Beispiel in
diesem Fall eine Zahl. Im Inneren werden wir
im Grunde etwas
haben, das
als Fallaussagen bekannt ist, die irgendwie
wie if-Aussagen sind. Ich kann Fall 50 mit einem Doppelpunkt sagen. Wenn ich die Eingabetaste drücke, könnte ich
dann die Zahl 50 hinzufügen. Dann muss ich
etwas hinzufügen, das als
Break-Anweisung bekannt ist. Ich fahre weiter und
führe das mit Shift F2 aus. Hier kann ich die Zahl 50
eingeben, das heißt
die Zahlen 50. Wenn ich das jetzt noch einmal durchführe, gebe
ich noch etwas ein.
Zum Beispiel 51. Eigentlich
wird nichts passieren, weil wir
offensichtlich nirgends
mit 51 umgehen. Dies ist anders
als eine if-Anweisung und es hatte eigene Anwendungsfälle. Es wird tatsächlich
am häufigsten für
meine Erfahrung beim
Vergleich von Strings verwendet , aber Sie können es anstelle von
if-Anweisungen verwenden , wenn wir es
wirklich wollten. Aber es steckt noch mehr dazu. Zum Beispiel kann ich in weiteren Fällen
hinzufügen. Also Fall 51, kann ich hinzufügen. Die Zahl ist 51
und ich kann brechen. Wenn
ich das jetzt ausführe und 51 hinzufüge
, wird es das natürlich sagen. Aber was passiert, wenn ich nach zwei verschiedenen Nummern
suchen möchte ? Nun, ich kann auch den Fall von 52 sagen. Und dann sagt die
Print-Anweisung, dass die Zahl 51 oder 52. Wenn ich das jetzt durchführe, kann ich dann
in 52 einsteigen. Es heißt, die Zahl ist 51 oder 52. Natürlich bekommen wir
die gleiche Ausgabe wenn ich die Nummer eins eintrage. Jetzt wird die Möglichkeit, zwei
verschiedene Werte mit einer
if-Anweisung
zu überprüfen , in
einigen Videos im Kurs erklärt . Es ist viel einfacher,
das mit Switch-Anweisungen zu erklären. Deswegen
verstehe ich es hier. Eine Sache, die Sie
beachten sollten, ist im Grunde genommen, wenn einer
der Fälle wahr ist, wird
der Code weiterhin ausgeführt bis eine
break-Anweisung gefunden wird. Zum Beispiel kann ich
dies in die Zahl 52. ändern. Dann kann ich ausdrucken, die
Nummer ist 51 genau hier. Beachten Sie, dass wir nach dieser
Print-Anweisung hier keine Break-Anweisung haben . Das hier ist der
einzige Bruch, wenn wir vierhunderteinundzweiundfünfzig und zweiundfünfzig
haben. Wenn ich das also ausführe
und 51 erbe,
wird es
passieren, dass der Code weiter
ausgeführt wird , bis er eine Break-Anweisung
findet. Wir sehen, dass die Zahl 51 ist. Es ist egal, ob
es hier einen Fall gibt. wird es einfach ignorieren. Und es wird
diese Linie genau hier laufen, die Nummer für die beiden, und
dann werden wir brechen. Jetzt
wird eine letzte Sache
für Switch-Anweisungen Standard sein, was
normalerweise ganz am Ende geht. Und das ist irgendwie wie die else-Aussage
für if-Aussagen. Hier kann ich eine unbekannte Nummer
ausdrucken. Und technisch gesehen
brauchen Sie keine Break-Anweisung obwohl viele
argumentieren, dass es sich um eine richtige Syntax handelt. Aber der Code funktioniert auch
ohne eine Break-Anweisung einwandfrei ,
denn natürlich sollte der Standardwert
der allerletzte Fall
sein, in
dem Scheck in
Ihrer Switch-Anweisung ist. Wenn ich das
ausführe, gebe ich eine andere Zahl ein, zum Beispiel negative 500. Wir sehen dann eine unbekannte Nummer. Switch-Anweisungen sind
ziemlich einfach und können anstelle von
if-Anweisungen und einigen Anwendungsfällen verwendet werden. In der Regel verwenden Sie
jedoch nur if-Anweisungen.
10. Vergleichsoperatoren: Wir werden jetzt zu if-Anweisungen
zurückkehren und
einen Blick auf Vergleichsoperatoren werfen. Dies sind verschiedene Möglichkeiten
, zwei Werte zu vergleichen. Zuvor mussten wir uns das Doppelgleichheitszeichen
ansehen, das einfach den Wert auf der linken Seite
überprüft und mit
dem Wert auf
der rechten Seite vergleicht. Aber es gibt viel mehr
Operatoren, die wir
innerhalb von Java oder so ziemlich
jeder Programmiersprache verwenden können . Zum Beispiel haben wir
ein Zeichen größer als. Es gab weniger als ein Zeichen. Wir haben größer oder gleich und wir haben weniger
als oder gleich. Und wir haben auch ein Ungleichwertiges. Jetzt sind die meisten davon
sehr selbsterklärend. Aber schauen wir uns ein paar Beispiele
an. Wie ich schon sagte, wenn die Zahl nicht gleich 50
ist, kann
ich dann
die Nummer ausdrucken, seine nicht 50. Und wenn ich das ausführe
und 50
eintrete, werden wir natürlich
nichts sehen , weil die
Zahl 50 entspricht. Daher ist diese Bedingung
genau hier falsch. Aber wenn ich das
noch einmal starte und
etwas anderes eingebe , zum Beispiel einen, sehen
wir, dass die Zahl
nicht 50 ist, weil
man natürlich dasselbe ist wie 50. Jetzt probieren wir noch ein paar andere Dinge aus. Zum Beispiel kann ich sagen, dass
Zahl größer als 50 ist. Ich kann auch die Zahl
größer als 50 sein. Und wenn ich das ausführe, kann ich jetzt jede
gewünschte Nummer
eingeben, zum Beispiel 900. Und es wird sagen, dass die
Zahl größer als 50 ist. Aber wenn ich etwas
weniger als oder gleich 50 eingebe, wird nichts passieren. Der gleiche Teil ist wichtig , da 50 nicht
größer als 50 ist. Es ist gleich damit. Wenn ich 50
eintrete,
wird nichts gedruckt. Wenn ich diese Funktionalität wollte, kann
ich
größer oder gleich 50 sagen. Wenn ich das ausführe und 50
eintrage, werden
wir natürlich sehen, dass die
Zahl größer als 50 ist. Aber das liegt nur daran, dass
ich diesen Text nicht aktualisiert habe. Aber der wichtige Teil
dabei ist, dass die Zahl jetzt
größer oder gleich 50
ist. Und natürlich
werden die
weniger Zeichen Operatoren genau auf die gleiche Weise arbeiten. Ich bin mir sicher, Sie können
sich vorstellen, wie diese
funktionieren werden , und wir können diese
verwenden, um kompliziertere
Ausdrücke in unseren
if-Anweisungen zu haben
, um dann komplexere und
aussagekräftigere Programme zu haben.
11. Logischer Betreiber: Werfen wir einen Blick auf
logische Operatoren. Dies sind andere Möglichkeiten,
kompliziertere Überprüfungen
in unseren if-Anweisungen hinzuzufügen . Ein paar Beispiele dafür
werden der NOT-Operator sein. Dies wird auch der
logische UND-Operator sein. Und der logische ODER-Operator
, der durch Halten der Umschalttaste und Drücken der obigen Taste dient, geben Sie ein. Der NOT-Operator wird im Grunde nur einen Wert umkehren. Der UND-Operator wird
im Grunde sicherstellen , dass das Ding links und die Dinge auf der
rechten Seite wahr sind. Der Operator oder wird
sicherstellen, dass
das Ding links oder
rechts oder beides wahr ist. Werfen wir einen Blick auf all
dies mit Beispielen. Ich kann sagen, wenn die Zahl
genau gleich 50 ist, die
Zahl genau gleich 55 ist, kann
ich dann 50 oder 55 ausdrucken. Und wenn ich das mache, kann
ich jetzt 50 eingeben und wir sehen, dass 50 oder 55 das wieder
laufen, wir 55
eingeben, wir sehen
dasselbe. Und wenn ich das ausführe
und etwas anderes eingebe, zum Beispiel 70,
sehen wir nichts in der Konsole. Grundsätzlich möchte dies sehen , dass die linke Seite
des Operators
oder die rechte Seite oder beides wahr sind. Und es könnte offensichtlich sein,
weil dies
der logische ODER-Operator ist . Lassen Sie mich weitermachen und fügen Sie hinzu
, wofür diese stehen. Der logische
ODER-Operator
wird dies oder jener sein, entweder einer. Jetzt wird
der AND-Operator in diesem Anwendungsfall zu sehr sinnvoll sein, da die
Zahlenvariable nicht gleichzeitig
5055 enthalten kann . Ein besseres Beispiel für
den UND-Operator ist, wenn Sie größer
als und weniger als verwenden. So könnte ich zum Beispiel sagen, Zahl
größer oder gleich 50 ist und die Zahl
kleiner oder gleich 55 ist. Also sollte alles von 50 bis
55 enthalten sein. Ich ändere
das auf 5255. Und wenn ich das durchführe, kann
ich jetzt 52 eingeben. Und wir sehen, dass das stimmt. Im Wesentlichen, wenn die Zahl
größer als oder 50 ist und die Zahl kleiner oder 55 ist als die gesamte
if-Anweisung wahr ist. Wenn einer dieser beiden
Ausdrücke falsch ist, ist die if-Anweisung
falsch. Wenn ich das zum Beispiel noch
einmal ausführe und 56 eingebe, wird
nichts passieren. Während dieser Teil
genau hier zutrifft, denn 56 ist
größer oder gleich 50. Es ist genau hier falsch, denn für die Sechs ist nicht
kleiner oder gleich 55. Und der und der Operator verlangt sowohl eine Linke als auch das
Recht, um wahr zu sein. Werfen wir nun einen
Blick auf einen NOT-Operator
, der im Grunde
nur
einen booleschen Ausdruck
mit einer if-Anweisung umkehren wird , wir können bestimmte
Bedingungen tatsächlich miteinander koppeln. Zum Beispiel kann ich
eine Klammer um
diese ganze Sache wickeln . Und wenn ich das machen würde, würde
das Gleiche passieren. Aber jetzt können wir einen
NOT-Operator oder vorher verwenden. Dieser gesamte Ausdruck
ist entweder wahr oder falsch, je nachdem wahr oder falsch, je nachdem,
ob der Wert der Zahl
der NOT-Operator ist,
wird dies einfach umkehren. Also sage ich nicht 5255. Wenn ich das durchführe,
könnte ich dann 52 eingeben. Es passiert nichts. Aber wenn ich das
noch einmal durchführe und
etwas eingebe , das
nicht zwischen 5055 liegt, zum Beispiel alle 34, sehen
wir nicht 5255. Der NOT-Operator wird einfach einen
booleschen Ausdruck umkehren. Und während des gesamten
Kurses werden wir weitere Anwendungsfälle
des Not-Operators und der beiden
anderen Operatoren sehen. Und wie nützlich können sie sein.
12. Während der Schleife: Wir werden
uns jetzt das
einfachste Beispiel für eine Schleife ansehen. Und dies ist eine Möglichkeit,
bestimmte
Codestücke immer wieder laufen zu lassen solange wir
möchten, dass sie ausgeführt werden. Es gibt also ein paar
verschiedene Arten von Schleifen. Aber in diesem Video werfen
wir
einen Blick auf die While-Schleife. Also können wir sagen While Klammer
und dann geschweifte Klammern. Und innerhalb dieser Bedingung
wird ein
boolescher Ausdruck sein. Dies wird entweder wahr oder
falsch
sein , wenn diese Schleife weiterhin ausgeführt
werden soll. Zum Beispiel kann ich eine ganze Zahl
namens Counter
erstellen und diese auf 0
setzen. Ich könnte dann sagen, während der
Zähler weniger als zehn ist, kann
ich dann in
die While-Schleife gehen und
alles in den geschweiften Klammern wird ausgeführt,
solange dieser Zustand
genau hier wahr ist. Jetzt
wäre dies derzeit als
Endlosschleife bekannt , da sich der
Zähler nie ändert. Es ist immer 0. So ist Counter
Lift und Zinn immer wahr. Wir wollen sicherstellen
, dass wir den Zustand des Zählers tatsächlich geändert haben, wo es möglich ist, zehn oder
mehr zu sein. Auf diese Weise
bleiben wir nicht ewig im Schlaf stecken. Tu das. Ich werde zuerst
ausdrucken, wie der Zähler ist. Ich sage „Zähler“, Doppelpunkt. Und dann könnte
ich außerhalb der Saite einen Pluszähler machen. Dies fügt den Inhalt
der Zählervariablen Gesamtzeichenfolge hinzu, die an die
Druckzeilenfunktion
übergeben wurde . Jetzt kann ich danach Counter plus plus
sagen. Oder wenn ich es wirklich wollte, könnte
ich das genau hierher stellen. Wie wir bereits erfahren haben, wird es
zuerst erhöht, wenn Sie das
Plus plus links neben
dem Variablennamen
setzen wird es
zuerst erhöht, wenn Sie das
Plus plus links neben
dem Variablennamen und dann verwenden Sie es. In diesem Fall
drucken wir es auf die Konsole. Bevor wir das ausführen, lasst uns das
durchgehen, was ich gerade getan habe. Ich habe eine ganzzahlige
Variable mit dem Wert 0 erstellt. Und wir sagen, obwohl diese
Variable weniger als zehn ist, werden
wir den gesamten Code
innerhalb dieser geschweiften Klammern ausführen . Jetzt druckt dieser Code
einfach den Zähler aus. Aber bevor wir den Zähler tatsächlich
ausdrucken, werden
wir ihn um eins
erhöhen. Dies bedeutet, dass unsere
Schleife nicht mehr
unendlich ist , weil sie
zum ersten Mal eine, dann zwei,
dann drei usw. drucken wird ,
bis sie zehn erreicht, wobei der Zähler weniger als Zinn nicht mehr sein
würde stimmt. So können wir dann aus
unserer Schleife ausbrechen und mit
dem Rest unseres Programms fortfahren. Lasst uns das in
Aktion sehen. Ich kann Shift F2 machen. Es sollte unser Programm ausführen. Und wenn ich dieses Fenster erweitere, sehen
wir jetzt den
Zähler eins bis zehn. Dies ist ein sehr einfaches
Beispiel für eine Schleife. Im Grunde genommen werden
wir, obwohl dies zutrifft, den gesamten Code
innerhalb der geschweiften Klammern ausführen .
13. Tritt mit Schleifen: Werfen wir jetzt einen Blick
auf die Do While-Schleife. Dies ähnelt
der While-Schleife, wird
aber etwas
seltener verwendet. Die Syntax bei uns wird
fällig sein, dann geschweifte Klammern. Und dann würden wir am Ende
geschweifte Klammer sagen,
während wir mit unseren Klammern
und einem Semikolon sind. Jetzt wird die Bedingung genau hier
hineingelegt werden . Grundsätzlich ist das Konzept
hier, dass wir diesen Codeblock
sofort
ausführen werden , egal was passiert. Dann wird es danach im Grunde nur
eine normale While-Schleife werden. Wir werden diesen
Codeblock
weiterhin ausführen, solange diese
Bedingung zutrifft. Aber egal welchen Codeblock wir mindestens einmal ausgeführt haben, das ist anders
als eine While-Schleife,
bei der dieser Block-Hook-Code
nur beim ersten Mal ausgeführt wird , nur wenn die Bedingung wahr ist. Ein praktischer
Anwendungsfall dafür ist Benutzereingaben zu
erhalten und sicherzustellen, dass wir
die richtige Art
der Eingabe oder eine korrekte Nummer erhalten . Zum Beispiel kann ich sagen, dass der
Scanner-Eingang einem neuen Scanner entspricht. Ich kann System Dot
n übergeben . Und dann sage
ich hier int number. Ich werde ihm keinen Wert
zuweisen. Und das
können wir mit Variablen machen. Wir können sie erstellen, aber Sie müssen ihnen nicht sofort
einen Wert zuweisen. Jetzt innerhalb
des Codeblocks hier werde
ich sagen, dass Zahl
gleich Eingabepunkt nächsten int ist. Dann sage ich, während die
Zahl weniger als zehn ist. Was dieser
Code im Wesentlichen tun wird, ist dass
wir zuerst
einige Eingaben vom Benutzer erhalten. Wir werden eine Nummer erstellen , die wir
später verwenden werden. Und dann werden
wir diesen Code ausführen. Egal wie die
Walk-Bedingung ist, es läuft immer einmal. Im Wesentlichen erhalten
wir vom Benutzer
Eingaben,
idealerweise eine Zahl. Und dann werden wir
das weiter ausführen, solange
diese
Bedingung genau hier zutrifft. Daher müssen wir
eine Zahl angeben, die zehn oder
mehr ist , damit sie
tatsächlich eine gültige Eingabe erhält. Jetzt, danach drucke ich
die Nummer aus. Ich führe das
mit Shift und FTN aus. Jetzt kann ich hier drin
eintragen, was ich will. Zum Beispiel fünf oder sieben. Alles, was weniger als zehn ist, wird vollständig ignoriert, da
die
While-Schleife diesen
Codeblock hier immer wieder
laufen lässt , bis
diese Bedingung falsch ist. Ich kann
zum Beispiel sogar
negative 5 Tausend eingeben , und es
wird immer noch funktionieren. Aber sobald ich etwas
zehn oder mehr eingebe , zum Beispiel 84, wird es
aus dieser Schleife ausbrechen und es wird genau hier 84
drucken.
14. Für Schleifen: Werfen wir einen Blick auf
die stärkste Schleife, die als for-Schleife bekannt ist. Dies ist der beste Weg
, Dinge
zu zählen oder eine Liste
bestimmter Elemente zu durchlaufen. Das mag verwirrend klingen, aber im Laufe des Kurses werden Sie Beispiele dafür
sehen. Lasst uns einfach
versuchen, etwas zu zählen. Im vorherigen Beispiel habe ich einen Zähler
erstellt und dann hat er eine While-Schleife benutzt, um darüber
zu zählen. Wir können eine for-Schleife verwenden, um dies zu erreichen und einen
viel saubereren Weg. Zum Beispiel kann ich für
Klammern geschweifte Klammern sagen. Und innerhalb der Klammern wird
es
drei verschiedene
Elemente geben , die durch Semikolons getrennt werden. Die erste wird die Initialisierung
sein. Hier
können wir tatsächlich
Variablen erstellen , die mit unserer Schleife
verwendet werden können. Also kann ich sagen, dass int
counter gleich 0 ist. Die zweite wird
eine Bedingung sein, die einer Weile
oder einer Do-While-Schleife
ähnelt. Dies wird der Fall sein, wenn die Schleife weiter laufen
soll. In diesem Fall
sage ich Counter weniger als zehn. Danach wird dieser letzte
Abschnitt Code sein, den
wir jedes Mal ausgeführt haben, wenn
die Schleife abgeschlossen ist. In diesem Fall möchten wir plus plus Zähler
sagen. Also jedes Mal, wenn wir den Zähler um eins
erhöhen. Jetzt hier drin werde ich einfach den Zähler
an die Konsole drucken. Und wenn ich das
mit Shift und F2 mache, sollten
wir eine Zählung
von 0 bis neun sehen, wie wir genau hier sehen. Immer noch auf dem Laufenden. Zuerst beginnt es diese
Variable nur einmal. Dann sitzt, wenn diese
Bedingung zutrifft, wenn ja,
wird hier nicht der gesamte Code
in unseren geschweiften Klammern ausgeführt, einfach 0 auf die
Konsole drucken, wie wir dort sehen. Sobald es das Ende erreicht hat, ihm klar, dass
nichts mehr zu tun ist. Also geht es um eine Schleife zurück. Dabei
erhöht es hier den Zähler. Diese Gnosis, dieser Zähler
ist jetzt 11 ist weniger als zehn. So süß, den Prozess zu wiederholen bis diese Bedingung falsch ist, was wir genau hier sehen. Denn sobald es neun ist
und auf zehn ansteigt, ist
die Bedingung nicht mehr zutreffend. Deshalb brechen wir
aus der Schleife aus.
15. Brechen und fortsetzen: Werfen wir einen
Blick auf die Pause und
die Continue Keywords mit dem Betrachten
von Break in Switch-Anweisungen. Und es funktioniert hier in
ähnlicher Weise. Dies sind jedoch zwei
Schlüsselwörter, die in jedem
der Loop-Typen
verwendet werden können . Zum Beispiel kann ich sagen, dass
int counter gleich 0 ist, während der Zähler weniger als zehn ist. Jetzt hier drin
werde ich zuerst den
Zähler erhöhen und dann drucke ich
ihn auf die Konsole aus. Aber sagen wir, dass
ich die Nummer
fünf übersprungen habe, nachdem ich sie erhöht habe. Aber bevor ich auf die
Konsole drucke, wie gesagt, wenn der Zähler genau
gleich fünf ist, kann
ich jetzt weitermachen und
weitermachen oder im Grunde alles andere in
einer Schleife überspringen und einfach
zum Anfang von die Schleife. Es wird immer noch
den Zustand überprüfen. Aber alles hat diese
fortlaufende Aussage hier bestanden , nun, im Grunde genommen ignoriert zu werden, ist nur diese Zeile hier. Im Wesentlichen springen wir, sobald
wir das erreicht haben, einfach wieder
zum Anfang und sie
schleifen von dort weiter normal.
Ich drücke die Umschalttaste
und F2, um den Code auszuführen. Und hier sehen wir eins bis zehn, aber fünf fehlen. Unmittelbar
danach sehen wir 46. Das ist das Schlüsselwort „fortsetzen“. Es springt automatisch zum Anfang der Schleife
zurück. Werfen wir einen Blick
auf das Schlüsselwort break. Einige von Ihnen raten vielleicht schon
, was das tun wird. Im Wesentlichen, anstatt einfach wieder zum Anfang zu
springen, wenn er vollständig
aus der Schleife ausbricht. Wenn ich das ausführe, sehen wir eins bis vier, denn
sobald fünf erreicht sind, wird es sofort kaputt gehen
und den Code außerhalb
der While-Schleife
ausführen. Sie können diese beiden
Keywords verwenden, um eine bessere
Kontrolle über Ihre Loops
zu haben und was ausgeführt
wird und wann Sie daraus ausbrechen müssen. Und diese beiden Schlüsselwörter
funktionieren hier an jeder Schleife in Java, einschließlich der drei
Typen, die wir bisher gesehen haben.
16. Calculator: Lassen Sie uns alle Fähigkeiten, die
wir bisher gelernt haben, in die USA einbringen. Lassen Sie uns unser
allererstes Projekt machen. Wir werden einfach
ein einfacher Taschenrechner sein. Nun werden die meisten Dinge, die
Sie bisher gelernt haben direkt
in diesem Projekt angewendet. Was dieses Projekt
entwickelt hat, ist immer noch
schwierig , wenn Sie zu
Beginn dieses Kurses ganz neu in der
Programmierung sind. Wenn Sie auf Probleme stoßen
oder mit
diesem Projekt zu kämpfen haben , das
erwartet wird und sich keine Sorgen macht, drei wichtige Dinge tun, die ich tun
wollte, wenn es um dieses Video
geht. Der erste wird
einen Plan durchgehen. Wenn Sie ein Programm entwerfen, auch nur einen einfachen Taschenrechner, ist
es wichtig, einen Plan und
eine allgemeine Vorstellung davon zu
haben ,
was Sie
tun möchten, bevor Sie mit dem
Schreiben von Code beginnen. Die zweite Sache ist, dass ich möchte, dass
du es alleine versuchst. Also zeige ich
dir Schritt für Schritt wie ich uns machen würde. Aber bevor ich das mache, möchte
ich, dass du
dieses Video pausierst und versuchst es selbst zu
machen,
nachdem wir einen Plan durchgegangen sind. Während Kurse wie
dieser helfen, ist
der beste Weg, um beim
Programmieren besser zu werden, der richtige Code. Ich ermutige Sie dringend, so weit wie möglich
alleine zu
kommen , bevor Sie sich ansehen, wie ich das
umsetzen würde. Jetzt
wird das dritte Ding sein, ich zeige Ihnen, wie
ich dieses Programm gemacht habe. Nachdem wir
unseren Plan gemeinsam entworfen haben und nachdem Sie versucht haben, dies selbst zu
erstellen, zeige
ich Ihnen, wie
ich dieses Programm erstellen würde. Beginnen wir mit Schritt eins und gehen einen Plan durch. Was sollte dieses Projekt machen? Und was müssen wir tun,
um das zu erreichen? Nun, das erste ist, dass es nach zwei Zahlen fragen
sollte. Dann sollte es fragen, oder eine mathematische Operation. Dies wird ein Plus sein, abzüglich Multiplikation
oder Division. Es wäre also einer
dieser vier Charaktere. Danach müssen wir
das Ergebnis anzeigen und dann zum Start
des Programms
zurückkehren , wo
wir nach Zahlen fragen. Dies ist ein sehr, sehr grundlegender Plan, wenn es
um dieses Projekt geht. Einige dieser Dinge
sollten einfach sein. andere Dinge
müssen Sie nachdenken, vielleicht sogar auf frühere Lektionen
zurückgehen. Versuchen Sie erneut,
dieses Video
sofort anzuhalten und gehen Sie so weit
wie möglich
alleine und kommen Sie dann
zurück, sobald Sie
ein Projekt abgeschlossen haben oder wenn Sie 100% stecken geblieben sind und Sie nicht weiter kommen
können. Und ich zeige Ihnen Schritt für Schritt wie ich dieses Programm machen würde. Hoffentlich hast du
es schon alleine versucht. Lassen Sie uns nun jeden
dieser Schritte
umsetzen. Aber unser Plan hier zeigt eine wichtige Verwendung beim Lesen
aller Anweisungen. Zum Beispiel sehen wir hier, dass
wir zum
Start des Programms zurückkehren werden. Das bedeutet, dass sich
dieses gesamte Programm innerhalb einer While-Schleife befinden
könnte. Ich kann sagen, solange wahr ist. Jetzt wird dies eine
Endlosschleife sein, die für immer läuft, was für diesen Anwendungsfall in Ordnung ist. Jetzt wird es sagen, dass es nach zwei Zahlen fragen
sollte. Also
beginne ich einfach damit,
einen Scanner zu erstellen , der Eingaben aufruft, diesen auf einen neuen Scanner ein, der
in Systempunkt n übergeht. Dann drucke ich aus und
gib die erste Zahl aus. Dann sage ich, int Nummer eins ist gleich Eingabepunkt nächstes int. Bisher haben wir
nach einer Nummer gefragt. Lassen Sie uns im Grunde
genau das Gleiche für
die zweite Zahl machen . Ich drucke einfach aus, gib
die zweite Zahl ein. Und dann werden wir eine weitere Ganzzahl
haben, int Nummer zwei ist gleich
Eingabepunkt nächstes int. Bisher ist der
allererste Schritt erledigt. Wir haben jetzt die beiden Zahlen. Jetzt sollten wir uns
eine Matheoperation machen. Plus Minus
Stern oder vier Schrägstrich wird Addition, Subtraktion, Multiplikation
oder Division sein. Lassen Sie uns als Nächstes dem
Benutzer mitteilen, was zu tun ist. Ich kann sagen, betreten Sie eine Operation. Dann werden wir sagen,
welche Optionen es gibt. Plus, minus Stern und Schrägstrich. Wie ich schon sagte, String Operation ist als nächstes
gleich Eingabepunkt. Jetzt haben wir Zugriff auf die Nummern und
die gewünschte Operation. Wenn Sie jetzt if-Anweisungen
zum Vergleich
zweier Strings verwenden , funktioniert nicht richtig mit allem, was
ich Ihnen bisher beigebracht habe. diesem Fall werden
wir hier
Switch-Anweisungen verwenden. Ich kann sagen, Switch-Betrieb. Ich könnte dann
Fall mit einem Plus sagen. Ich füge die Pause hinzu
und dann
sage ich Fall minus break. Ich mache einfach weiter und
füge alle vier hinzu. Wir haben Fall, Star,
Break, Case,
Vorwärts-Schrägstrich. Um bei all diesen
Ergebnissen ein Ergebnis zu erhalten, muss
ich es außerhalb
dieser geschweiften Klammer erstellen. Die Details darüber, warum das so ist, werden
in einem zukünftigen Video erklärt. Also erstelle ich eine
Ganzzahl namens Results. Ich werde noch keinen Wert zuweisen. Das werden wir innerhalb
unserer Switch-Anweisung tun. Wenn sie also ein Plus eingegeben haben, werde
ich sagen, dass die Ergebnisse gleich Nummer eins
plus Nummer zwei sind. Stellen Sie außerdem sicher, dass Sie
eine Reihe von richtig buchstabieren. Dann werde
ich von minus sagen, dass Ergebnis gleich Nummer eins minus Nummer zwei ist. Für die Multiplikation
kann ich sagen, dass Ergebnis gleich Nummer eins Mal Nummer zwei ist. Und dann
kann ich für die Division sagen, dass Ergebnis gleich Nummer eins geteilt
durch Nummer zwei ist. Jetzt, außerhalb der
Switch-Anweisung, kann
ich dann das Ergebnis ausdrucken, wie ich schon sagte, Ergebnisraum. Und ich kann die
Ergebnisse gleich hier hinzufügen. Jetzt
erhalten wir tatsächlich einen Fehler und unsere IDE, indem wir den Mauszeiger darüber bewegen, heißt
es, dass variable Ergebnisse möglicherweise
nicht initialisiert wurden. Wir können fortfahren und
auf eine Variable initialisieren klicken. Es wird einfach gleich hier 0
zuweisen. Obwohl wir diesen Wert überschreiben werden
, sieht
es immer noch gerne dass wir einen Standardwert
haben da er nicht genau
weiß, ob einer dieser vier
Fälle ausgeführt wird. Lass uns weitermachen
und lass uns sehen, was passiert. Wenn ich die Umschalttaste und F2 drücke, heißt
es, gib
die erste Zahl ein. Ich gebe fünf ein,
gib die zweite Zahl, drei ein und drehe die Operation. Ich gebe die
Multiplikation ein. Das Ergebnis ist 15 und
blickt jetzt auf
die erste Zahl zurück. So könnte ich zum Beispiel
105 machen und dann subtraktion. Und hier kriegen wir fünf. Also wird es immer wieder
schleifen und
immer wieder nach
der ersten zweiten Nummer fragen. Und wir können dann jede Art von
operativ machen , die wir wollen,
mit diesen Zahlen. Denken Sie nun daran, dass wir
hier ganze Zahlen verwenden. Wenn Sie also versuchen zu sehen, wird es Ihnen
nur eine
ganze Reihe von Ergebnissen liefern. Wenn Sie
genauere Ergebnisse wünschen, können
Sie für die
Ergebnisvariable double und anstelle
von Integer verwenden . Wenn Sie
dieses Programm jetzt selbst stellen können, dann herzlichen Glückwunsch
und gute Arbeit. Aber wenn er sich einige
der zusätzlichen Videos ansehen musste , um dies
zu tun, machen Sie sich keine Sorgen,
das ist vollkommen in Ordnung, besonders wenn Sie neu in der Programmierung sind, denn dies ist eine
brandneue Fähigkeit. Während er den Kurs
durchläuft, werden
mehr Dinge für Sie deutlicher und einfacher für Sie. Es braucht nur Zeit, um all diese Dinge zu
lernen.
17. Methoden: Hier
wird es etwas komplizierter,
aber auch mehr Spaß. In diesem nächsten Thema
geht es um Methoden. Methoden sind im Grunde
nur ein Codeblock,
der ausgeführt wird, und ihr Ziel ist es, eine bestimmte Sache
zu tun. In der Tat haben wir die ganze Zeit
in einem Methodisten gearbeitet. Diese Hauptmethode
hier wird
standardmäßig ausgeführt , wenn wir unser eigenes Programm
ausführen. Aber wir können
unsere eigenen Methoden
außerhalb der geschweiften Klammern
für die Hauptfunktion erstellen , ich kann sagen, öffentlich, statisch, ungültig, zum Beispiel Klammern
und dann geschweifte Klammern. Und hier drin können wir
jeden Code schreiben, den Sie wollen. Zum Beispiel kann ich
einfach Hello World ausdrucken. Dann kann
ich in unserer Hauptmethode ein Beispiel sagen. Und es wird automatisch
wissen, dass wir versuchen, diese Funktion auszuführen. Wenn ich die Umschalttaste und F2 drücke, sollte
es unser Programm ausführen. Und hier sehen wir HelloWorld
in der Konsole. Hier passiert also viel. Und ich habe auch Methoden
erwähnt, und es hat auch Funktionen
erwähnt. Und Funktionen sind
praktisch das Gleiche, obwohl es einen
leichten Unterschied gibt. Funktion ist im Grunde
das, was wir hier sehen. Dies ist technisch gesehen eine
Funktion und das ist es auch. Aber wann immer eine Funktion in einer Klasse
ist, was ich
in einem zukünftigen Video erläutern werde. Diese werden jetzt Methoden genannt, aber in den meisten Fällen spielt
es keine Rolle. Sie sind größtenteils austauschbar
. Aber technisch gesehen befindet sich eine Funktion außerhalb einer Klasse und
eine Methode befindet sich im Inneren. Jetzt werden wir
die Klassen
in Zukunft noch genauer abdecken , denken Sie an sie
als Container in dem alle
Ihre
Methoden sitzen können. diese
Klammern hier hinzufügen, wird diese Funktion aufgerufen oder ausgeführt oder
ausgelöst. Dies sind alles
austauschbare Begriffe im Grunde genommen eine
Möglichkeit haben, die Funktion auszuführen. Dies sind auch gängige
Terminologien, die
verwendet werden, wenn wir tatsächlich
versuchen, eine Funktion auszuführen. Jetzt
fragen Sie sich vielleicht, warum
die Beispielmethode genannt wird ,
wenn wir Hello World einfach
in der Hauptmethode
drucken können . Nun, das liegt daran, dass
dies offensichtlich ein zu vereinfachtes Beispiel ist. In einem echten Programm möchten
Sie
diese Beispielfunktion möglicherweise nicht nur einmal verwenden. Vielleicht möchten Sie
diese Beispielfunktion
mehrmals
in Ihrer Klasse verwenden mehrmals
in Ihrer Klasse oder waren während
Ihres gesamten Projekts. Die Fähigkeit, bestimmte Funktionen
in ihre eigenen Methoden zu abstrahieren , macht es viel einfacher
, diese Funktionalität wiederzuverwenden. Wir werden dies in realen Beispielen sehen wenn wir
zum Kurs vorankommen. Aber jetzt lassen Sie uns erklären,
was diese Klammern sind und was diese
Leere genau hier bedeutet. Grundsätzlich kann eine Funktion
Eingaben empfangen und sie kann
auch Input zurückgeben. Ich werde diese Kommentare los
. Und wenn ich auf
den Beispielnamen klicke und die Umschalttaste und F6 drücke, kann
ich jetzt
diese gesamte Funktion umgestalten oder umbenennen. Ich kann „add“ sagen. Wenn ich nun die Eingabetaste drücke, benennt es sowohl
die Funktion als auch
den Funktionsaufruf um. Jetzt können
wir innerhalb der Klammern etwas hinzufügen, das als Parameter
bekannt ist. Zum Beispiel kann ich
int num eins und int num2 sagen. Diese sind durch ein Komma getrennt. Wir können sogar mehrere
Arten von Variablen haben. Zum Beispiel String-Beispiel. Aber in diesem Fall fügen wir
nur zwei Zahlen hinzu. Es ist also nicht nötig, hier eine Zeichenfolge zu
haben. Jetzt gibt
uns automatisch
intelligent diesen roten Pfeil hier
und sagt, dass wir
ihn nicht ohne Parameter aufrufen können. So können wir
hier
einige Informationen weitergeben , zum Beispiel 510, und jetzt
haben wir keine Fehler mehr, aber dieser Code
funktioniert nicht so, wie wir es erwarten. Das liegt daran, dass wir immer noch
einfach nur Hello World drucken. Aber was wir tun
wollten, ist, dass wir die Summe zwischen
Num1 und Num2
zurückgeben wollen. Ich kann sagen, return num1 plus num2. Jetzt gibt es uns einen Fehler hier. Wenn ich den Mauszeiger
darüber fahre, kann kein Wert von
einer Methode
mit einem ungültigen Ergebnistyp zurückgegeben werden. Dies vermeidet genau hier, bedeutet, dass nichts zurückgegeben wird. Wir müssen uns sehr darüber im
Klaren sein, welche Art von Daten
von jeder Funktion zurückgegeben wird. In diesem Fall
geben wir eine ganze Zahl zurück , weil wir
die Einführung hinzufügen. Also könnten wir eine Lücke in
int ändern und der Fehler verschwindet. Jetzt hier drüben kann ich sagen, dass
int sum gleich 510 addiert, und ich kann einige ausdrucken. Wenn ich das jetzt
mit Shift F zehn ausführe, wird
dies den 15.
auf der Konsole drucken. Wenn wir das wollten, könnten
wir
diesen Funktionsaufruf auch einfach innerhalb
der Druckzeilenfunktion übergeben . Und tatsächlich war die Druckzeile eine eigene integrierte Funktion , die wir die
ganze Zeit genutzt haben. Es hat seine eigenen Klammern
und wir geben
Informationen an sie weiter, genau wie
wir es mit dieser Add-Funktion sind. Und hier ist ein perfektes Beispiel dafür warum wir Funktionen erstellen wollen. Weil ich
das ein paar Mal kopieren und einfügen kann. Und ich kann jetzt verschiedene
Werte hinzufügen, die ich wollte. Dies gibt uns jetzt drei
verschiedene Ergebnisse von 1520 und negativen drei. Und das liegt daran, dass wir hier
eine einfache
Add-Funktion haben . Jetzt ist dies offensichtlich eine
sehr einfache Funktion. Aber wenn wir
kompliziertere Funktionen
mit mehr Code darin hatten , können
Sie die Vorteile sehen Sie den Code nur einmal schreiben
müssen dass
Sie den Code nur einmal schreiben
müssen
und dann von
verschiedenen Orten aus ausgeführt werden viele
Male wie du es willst. Eine letzte Anmerkung
ist, dass diese hier technisch
als Parameter bezeichnet
werden, aber wenn sie übergeben
werden, z. B. genau hier oder diese Zahlen direkt, werden
diese als Argumente bezeichnet. Sie haben Parameter
und Argumente. Genau wie Funktionen oder Methoden werden
diese oft
austauschbar verwendet, aber technisch gesehen wird das,
was Sie in
die Funktion selbst schreiben , als Parameter
bezeichnet. Und was Sie in
die Funktion übergeben , wird als Argumente
bezeichnet. Aber auch hier werden
sie, genau wie
Funktionen versus Methoden, oft
austauschbar verwendet.
18. Method: Im vorherigen
Video haben wir
eine einfache Add-Funktion erstellt , die die Summe
zwischen zwei Zahlen
zurückgibt. Aber was ist, wenn wir Strings
zusammenfügen wollen , um einen Satz zu erstellen? Zum Beispiel kann ich
ausdrucken add hallo and world. Und offensichtlich funktioniert das nicht. Aber natürlich könnte ich
Add 55 ausdrucken und das würde funktionieren. In der Regel können Sie normalerweise nur eine Methode
mit demselben Namen
haben,
ähnlich wie Variablen, aber wir können etwas tun als Methodenüberladung
bekannt ist. Dies bedeutet im Grunde genommen,
mehrere Methoden
mit demselben Namen,
aber unterschiedlichen Parametern
und unterschiedlichen Rückgabetypen zu haben mehrere Methoden
mit demselben Namen, . Zum Beispiel kann ich eine öffentliche
statische Zeichenfolge mit einem Großbuchstaben S,
String s1 und S2 sagen statische Zeichenfolge mit einem Großbuchstaben S, . Jetzt kann ich hier
s1 plus ein Leerzeichen plus S2 zurückgeben. Grundsätzlich setzen Sie die
beiden Wörter zusammen. Jetzt haben wir zwei Methoden
, die denselben Namen haben, aber wir haben sie überlastet,
wo Java jetzt weiß, welche aufgerufen werden soll abhängig von den übergebenen
Parametern. Online sind fünf
Passieren und Strings. Also wie wird hier eine Methode
aufrufen? Linien bleiben für die
Weitergabe einer Ganzzahl haften. Also wie nennt man
die Methode hier? Ich kann weitermachen und
dieses Holster die Ausgabe ausführen. Hier sehen wir HelloWorld und zehn. Überladen von Methoden ist oft in Situationen wie diesen
nützlich, denen Sie ähnliche
Funktionalitäten haben, in
denen Sie ähnliche
Funktionalitäten haben,
aber
verschiedene Arten von Variablen übergeben möchten. Sie können diese Methoden überladen, sie
grundsätzlich verkeuern und
unterschiedliche Parameter und
möglicherweise einen anderen
Rückgabetyp haben unterschiedliche Parameter und möglicherweise einen anderen
Rückgabetyp , wenn dies für Sie sinnvoll ist.
19. Umfang: Jedes Mal, wenn wir eine
öffnende geschweifte Klammer erstellen, wie diese hier, schafft
es etwas, das als Scope
bekannt ist. Und der Umfang
wird einschränken, was bestimmte Variablen verwenden
kann und was nicht. Zum Beispiel kann ich sagen, dass
int counter gleich 0 ist. Und dann
erstelle ich eine While-Schleife , um diesen Zähler zu erhöhen. Während der Zähler weniger als zehn ist. Ich kann dann
Counter Plus Plus sagen. Jetzt können wir als
Zähler vollkommen in Ordnung zugreifen, also kann ich ihn hier ausdrucken und alles funktioniert wie erwartet. Aber was passiert, wenn ich
eine zweite Variable darin erstelle? Zum Beispiel sage ich, dass int
example gleich 15 ist. Und ich sollte das aus irgendeinem Grund
ausdrucken. Offensichtlich ergibt es nicht
zu viel Sinn, aber das ist nur ein Beispiel. Bisher funktioniert alles. Aber was passiert, wenn
ich versuche, außerhalb des
While-Loop-Bereichs auf ein
Beispiel zuzugreifen ? Also könnte ich versuchen, das
auszudrucken. Ich kann ein Beispiel hinzufügen und
wir erhalten hier einen Fehler. Wenn ich den Mauszeiger darüber fahre, heißt
es, das Symbolbeispiel kann nicht aufgelöst werden und es hat
sogar eine Lösung hier. Oder ich kann klicken, um
das int-Beispiel in
den aktuellen Bereich zu bringen . Beachten Sie, dass hier ein Beispiel
online 14 erstellt wird. Aber wenn ich
auf die Lösung klicke, erstellen
wir jetzt die
Variable in Zeile neun, die sich innerhalb des
Hauptfunktionsbereichs befindet. Dies bedeutet, dass alles innerhalb der Hauptfunktion es verwenden kann, einschließlich des
While-Loops-eigenen Bereichs, da ich mich auch innerhalb
der Hauptfunktion befinde. Es hat also unseren
Code geändert, um einfach ein Beispiel
mit dem Wert 15
neu zuzuweisen. Aber wir erstellen es
außerhalb der While-Schleife. Nun, trotz all dem gesagt, ist
es keine gute
Idee, alle
Ihre Variablen einfach blind an den
Anfang Ihrer Funktion zu stellen . Nehmen wir zum Beispiel an,
dass ich diese
Variable hier in Zeile 20 nicht ausdrucke. In diesem Fall muss die
Beispielvariable nicht
im Hauptbereich definiert werden. Stattdessen könnte es
einfach im
While-Loop-Bereich definiert werden. Ich könnte int example sagen. Und dann kann ich
die
Variablenerstellung genau hier loswerden . In der Regel sollten Sie Ihre Variablen, sofern
Sie keinen guten Grund dazu
haben , immer
so lokal wie möglich
definieren . Damit meine ich, genau hier ist
dies lokal wie möglich, ist
dies lokal wie möglich weil wir
die Variable online 16 verwenden. Also geht es an Ihren lokalen
Bereich genau hier. Es ist nicht notwendig, es
außerhalb des Hauptbereichs zu definieren,
denn im Moment verwenden
wir
mit diesem Code kein Anti,
den Hauptbereich. Wir verwenden es nur innerhalb
des While-Loop-Bereichs.
20. Ternärer Operator: Manchmal
möchten Sie vielleicht eine if-Anweisung schreiben, aber auf eine verdichteter Weise ist
dies oft der
Fall, wenn Sie einen einzelnen
Wert haben
möchten oder einer Variablen abhängig von einem wahre
oder falsche Aussage, wir können erreichen, dass
dies etwas war als ternärer Operator
bekannt ist. Dies wird
im Grunde eine Art von
Bedingung sein ,
gefolgt von einem Fragezeichen, dann einem wahren Wert, Doppelpunkt und dann einem falschen Wert. Jetzt mag das verwirrend erscheinen. Werfen wir also einen Blick
auf ein echtes Beispiel. Ich werde
ein boolesches Element namens
is member erstellen , bis
dies dem Wert true entspricht. Dies kann sein, wenn Sie
irgendwo für eine Mitgliedschaft
bezahlen und diese
eine einmalige einmalige Zahlung anbieten, erhalten
Sie möglicherweise einen
Rabatt auf diesen Kauf. So kann ich zum Beispiel hier sagen, dass int price equals Mitglied ist. Auch hier
ist dies unser Zustand. Eine Bedingung ist nur ein
boolescher Ausdruck. Eine einfache boolesche Aussage
wird also einwandfrei funktionieren. Also Fragezeichen, und dann haben
wir unseren wahren Wert. In diesem Fall könnte der
Preis 10 USD betragen. Aber was sagt, dass
wir Menschen, die noch nicht Mitglieder sind
,
einen höheren Preis verlangen wollen . Also kann ich jeden Doppelpunkt hinzufügen und dann könnte
der Preis hier bei 40 Dollar liegen. Jetzt kann ich den Preis hier
ausdrucken. Und ich kann das
mit Shift und FTN ausführen. Hier sehen wir zehn in der Konsole. Aber wenn ich das Mitglied
zu false ändere und ich das ausführe, werden
wir 40 in der Konsole
sehen. Der Grund dafür ist, dass
diese Bedingung hier falsch ist. Also, was wird
hier diesen Code verwenden , der
teilweise falsch war,
alles, was nach dem Doppelpunkt
verwendet wird. Wenn die Bedingung falsch ist, wird
alles vor dem Doppelpunkt verwendet, wenn es wahr ist. Jetzt könnten wir offensichtlich
etwas Ähnliches tun. Wenn ich sage, dass int price gleich 0 ist, dann kann ich sagen, ob es ist, denken Sie daran, ich kann jetzt
sagen, dass der Kurs zehn ist, sonst ist der Kurs 40. Und das wird genauso funktionieren. Aber ein ternärer Operator
glänzt hier wirklich , wenn
Sie
sehr einfache if-Anweisungen verwenden , bei denen Sie dies in
einer einzigen Codezeile haben möchten. Weil es offensichtlich
viel einfacher ist, diese eine
Codezeile zu
schreiben, als all dies zu schreiben.
21. Arrays: Sprechen wir jetzt über Arrays, die im Grunde nur eine
Sammlung von Variablen sind. Nehmen wir zum Beispiel an, ich habe eine Reihe verschiedener Testergebnisse für
Schüler. Ich kann sagen, dass
der Student eins gleich 96 ist, int Schüler zwei gleich 49, Schüler drei gleich 76 und so weiter und so weiter. Wenn ich nicht ein paar
davon
habe, möchte ich nicht unbedingt eine Reihe
verschiedener Variablen
erstellen. Stattdessen kann ich eine
Variable erstellen , die als Array
bezeichnet wird. Dies wird
im Grunde eine Sammlung
oder eine Liste
verschiedener Variablen sein . Ich muss zuerst die Variable angeben , die das Array halten
wird. Jedes Array kann nur einen einzigen Typ enthalten
. Man kann sie nicht mischen und abgleichen. Beispielsweise können Sie keine
Ganzzahl mit einer Zeichenfolge haben, die alle genau denselben Typ haben
müssen. Also kann ich int sagen, eckige Klammern
öffnen und schließen. Dies stellt ein Array dar. Ich konnte nicht sagen, dass die Ergebnisse der Schüler einer neuen int Breite
entsprechen, auch
die eckigen Klammern. Dies wird unser eigenes Array
erstellen. Aber wenn wir ein
Array ohne Anfangswerte erstellen
, wofür ich Ihnen hier in Kürze ein
Beispiel zeige, müssen
wir angeben wie viele verschiedene Arten von für
wie viele verschiedene Arten von
Elementen wir Platz schaffen
möchten. In diesem Fall
wollte ich Platz für drei schaffen. Und so habe ich jetzt ein
Array erstellt, das bis zu
den drei Ganzzahlen halten kann , um einen bestimmten Wert
zuzuweisen. Ich kann sagen, dass Schüler
Punkte, eckige Klammern. Und hier geben wir
etwas an, das als Index bekannt ist . Dies ist im Grunde
nur ein Zähler
, für den genau Slot wir von den
drei
verwenden werden, die wir erhalten. Dies beginnt bei 0 zu zählen. Ich kann also sagen, dass Schüler den
Index von 0 gleich 96. Die Schüler bewerten
den Index von eins gleich 49. Die Schüler bewerten
den Index von zwei gleich 76. Jetzt werde ich diese drei Ganzzahlen hier
oben los . Und jetzt möchte ich jede davon
auf die Konsole
ausdrucken . Um dies zu tun, können wir eine
sehr ähnliche Syntax verwenden. So kann ich den
Punkteindex der Schüler von 0 ausdrucken. Ich werde das mit Control
C und Control V
oder Befehl
C,
Befehl V auf einem Mac kopieren und einfügen mit Control
C und Control V
oder Befehl
C,
Befehl V auf einem Mac kopieren und . Und jetzt kann ich
diese Indizes auf 12 ändern. Jetzt kann ich das
mit Shift und FTN ausführen. Hier sehen wir alle drei Zahlen. Aber was passiert, wenn ich versuche
, auf Index drei zuzugreifen
, der eigentlich nicht existiert. In der Tat bekommen wir diese
kleine Warnung genau hier. Wenn ich den Mauszeiger darüber fahre, heißt es, Array-Index ist aus dem Gleichgewicht. Wenn ich das ausführe, erhalten
wir tatsächlich einen Fehler
in unserer Konsole. Und das ist
als Ausnahme bekannt. Eine Ausnahme ist, dass
etwas in Zukunft
einen weiteren Blick werfen wird. Aber im Moment
betrachte es einfach als einen Fehler. Der Grund, warum wir das bekommen haben,
ist, dass wir versuchen ,
auf etwas zuzugreifen, für das das
Array keinen Platz hat. Wir haben in diesem Array nur Platz für
drei Ganzzahlen zugewiesen, und wir haben alle drei verwendet. Denken Sie noch einmal daran, es
beginnt bei 0 zu zählen. Also die drei Spots, die
wir haben unsere 012. Daher kann Index
drei nicht existieren. Und es heißt,
auf etwas
außerhalb der Grenzen
dieses Arrays zuzugreifen . Ein weiteres Beispiel, das ich Ihnen
zeigen möchte, ist, wie Sie
eine Ganzzahl erstellen , indem Sie beim Erstellen bestimmte
Werte festlegen. Anstatt also
drei anzugeben, können wir dies löschen. Und dann werden
wir nach den
eckigen Klammern unsere eigenen geschweiften Klammern erstellen. Hier drin. Wir können eine beliebige
Anzahl von Elementen hinzufügen. Wir wollen Beispiel
sechsundneunzig, neunundvierzig und sechsundsiebzig. Und jetzt haben wir
diese Warnungen hier. Wenn ich den Mauszeiger darüber fahre, heißt es, diesem Wert bereits
eine Variable
zugewiesen ist. Im Wesentlichen sind diese
drei Codezeilen hier nicht
notwendigerweise überhaupt. Wenn Sie sie löschen und das Programm erneut
ausführen, erhalten
wir genau
die gleiche Ausgabe wie Sie hier sehen. Jetzt können wir Arrays für
jede Art von Variablen haben. Zum Beispiel können wir ein Array von
Strings oder ein Array von Booleans
erstellen , aber dies ist ein sehr einfaches
Beispiel mit Ganzzahlen. Und eine letzte Sache, die ich Ihnen zeigen
wollte, ist, wie Sie auf
die Länge oder die Anzahl der
Elemente innerhalb eines Arrays zugreifen können. Und eine letzte Sache, die ich Ihnen zeigen
wollte, ist wie viele Elemente es gibt, wie viele Elemente befinden sich
in einem Array? Ich kann das ausdrucken. Ich werde hier auf die Punktepunkte der
Schüler zugreifen. Wir können auf die Länge zugreifen. Dies wird eine ganze Zahl sein, und es wird sagen,
wie viele Elemente sich in diesem Array befinden. Also kann ich weitermachen und das machen. Hier sehen wir die Nummer drei , weil es
drei Elemente gibt. Wenn ich hier ein zusätzliches hinzugefügt
habe, kann ich das
noch einmal ausführen und wir sollten
vier sehen , wie wir es hier tun. Jetzt
sehen wir natürlich nicht, dass die 100 auf
der Konsole gedruckt werden, da wir
keinen Index drei drucken
, der jetzt
dank dieser 100 genau hier existiert. Aber wir drucken nur
die ersten Nullen oder die 100 sind auf der Konsole
ausgestellt.
22. Für jede Schleife: Im vorherigen Video haben wir uns
angeschaut, wie
Arrays erstellt werden und wie man auf
jedes einzelne Element zugreifen kann. Aber was wäre, wenn wir
eine größere Anzahl von
Ganzzahlen hätten und nicht
hauptsächlich jede einzelne ausdrucken wollen. Wir können eine
Standardschleife oder etwas, das
als für jede Schleife bekannt ist als für jede Schleife ,
um jedes Element zu
durchlaufen. Hier zeige ich
Ihnen zwei Beispiele. Hier haben wir einen
Standard for-Schleife. Ich zeige Ihnen auch ein neues Konzept , das eine für jede Schleife ist. Aber zuerst haben wir einen Standard
für die Schleife, wie ich schon sagte, für Klammern, geschweifte Klammern. Und drinnen erstelle
ich zuerst meinen eigenen Integer
Int-Counter gleich 0. Während der Zähler kleiner ist als die Schüler Punktlänge. Wir können dann den Zähler erhöhen. Und dann hier drin
kann ich sicherlich den
Zählerindex der Schüler
ausdrucken . Wir können hier Variablen
als Index übergeben. Und dies wird auf Index 0,
dann 12 usw. zugreifen , bis wir jedes
einzelne Element dieses Arrays durchlaufen. Um dies zu beweisen, kann ich
das mit Shift und F11 ausführen. Hier sehen wir alle vier
Zahlen in unserer Konsole. Jetzt ist das Durchlaufen von Arrays so üblich, dass sie
eine kürzere Syntax erstellt haben. Ich werde diese drei Zeilen
auskommentieren. Hier. Ich werde etwas benutzen, das als for-each-Schleife
bekannt ist. Ich kann für int number,
colon, dann den
Namen unseres Arrays sagen . In diesem Fall punktet ein Schüler. In hier wird die Anzahl der
Variablen
jedes einzelne Element enthalten ,
während es durch sie läuft. Bei der ersten Iteration
dieser Schleife wird
die Zahlenvariable den Wert 96 enthalten. es das nächste Mal durchläuft, hält
es 49 und so weiter. Um dies zu beweisen, kann ich die
Nummer ausdrucken und ich kann
diese mit Shift und FTN ausführen. Und hier sehen wir die
gleiche exakte Ausgabe. In der Regel funktioniert eine
foreach-Schleife, aber in einigen
Anwendungsfällen benötigen Sie möglicherweise Zugriff auf den Index
, den Sie verwenden. Zum Beispiel diese
Zählervariable genau hier. In diesen Situationen können Sie
einfach eine Standard-for-Schleife verwenden. Aber in den meisten Situationen wird
die für jede Schleife in Ordnung sein.
23. Mehrdimensionale Arrays: In früheren Videos haben wir uns einfache Arrays angeschaut, aber jetzt
schauen wir uns mehrdimensionale Arrays an. Grundsätzlich hat eine Raisa
Arrays als Werte. Hier erstelle ich ein Array mit
einer Reihe von Scores. Zum Beispiel kann ich hier in
zwei Klammern sagen, Punktzahl gleich geschweifte Klammern. Und hier wird ein weiteres Array von Werten
erwartet. Aber um diese Arrays zu definieren, verwenden
wir nur die geschweiften Klammern. Zum Beispiel haben wir unsere
geschweiften Klammern mit neunzig, sechs, vierzig, fünf und achtzig. Um dies jetzt einfacher zu
verstehen, um dies jetzt
zu verstehen, um dies einfacher
zu verstehen was das für Test1 sein wird
. Wir haben dann test2, der unterschiedliche Punktzahlen hat, sagen
wir 8666 und dann 90. Wie wollen wir
jedes einzelne Element durchlaufen? Wir müssen zuerst
jedes einzelne Array durchlaufen, wobei der Wert dann zu
jedem einzelnen Array wird. So können wir sowohl eine
Standard-For-Loop als auch
eine für jede Schleife verwenden. Ich zeige dir ein
Beispiel für beides. Für den Standard for-loop denke
ich, dass es für
int-Zähler 0 ist, während der Zähler kleiner ist
als die Punktlänge der Punktwerte, kann
ich dann den Zähler erhöhen. Jetzt
brauchen wir hier etwas, das
als verschachtelte for-Schleife bekannt ist. Wo ist, wo haben wir
eine Schleife innerhalb einer Schleife? Ich kann sagen, dass der
Int-Zähler gleich 0 ist, während Zähler zwei
kleiner als die Punktzahl ist, der
Index der Zählerpunktlänge plus einem Gegenwert gegenüber dem,
was hier passiert. Grundsätzlich machen wir
eine Standard-for-Schleife, die Sie sicher schon
verstehen. Aber dann haben wir eine
verschachtelte for-Schleife. Ich erstelle eine zweite
Zählervariable und verwende sie überall
außer hier. Was im Grunde
passieren wird, ist, dass
wir jedes
einzelne Array durchlaufen. Und darauf werden
wir auf der ersten for-Schleife
Zugriff haben . Index 0 der ersten
for-Schleife wird
dieser gesamte Array-Index sein , oder die zweite Iteration, die erneut durchläuft, wird dieses gesamte Array sein. Aber jetzt werden wir auf jedes einzelne Element innerhalb Scoreindizes des Zählers zugreifen, wird
zunächst auf dieses Array zugreifen. Wir greifen vom ersten Array aus auf die length
-Eigenschaft zu. Und dann, wenn die anfängliche
For-Loop-Schleife wieder läuft, erhalten
wir Zugriff auf das zweite Array, da der
Zähler mit einem gleichen Array ist. noch einmal daran, dass dies Index 0 ist. Index eins. Die Indizes beginnen bei 0 zu zählen. Um auf jeden einzelnen
Wert zuzugreifen, kann ich ausdrucken. Zuerst werde ich Test plus
ausdrucken, ich füge Klammern hinzu und
ich kann Zähler plus eins sagen. Der Grund dafür ist
, dass der Zähler bei
0 beginnt und wir test1,
test2 und nicht 0 testen wollen , testen Sie eins. Wir
fügen einfach einen zum Zähler hinzu. Aber dies wird die Gegenvariable
überhaupt nicht
ändern , da wir
im Wesentlichen
den Wert des Zählers nehmen und dann einen hinzufügen. Aber das weisen wir nicht der Gegenvariablen
zu. Danach werden wir jeden einzelnen Punktestand
hinzufügen. Zum Beispiel Scores
Index des Zählers und dann eine zweite Klammer,
Index des Zählers, der gestoppt werden soll. Ich führe das mit Shift und F2 aus. Wir sehen jetzt, dass Test1 9825 ist
und Test zwei sechsundachtzig,
sechsundsechzig und neunzig ist . Nur um
die Dinge ein wenig zu vereinfachen, wenn ich diese
Klammern loswerde und das führe, bekommen
wir im Grunde genau
das Gleiche, außer dass dieser Zähler bekommen
wir im Grunde genau
das Gleiche, außer dass dieser Zähler
hier Index
0 zeigt , während wir durchlaufen
das allererste Array und index1, während wir das zweite Array
durchlaufen. Der einzige Grund, warum
ich
hier plus eins hinzugefügt habe , ist, es
menschenlesbarer zu machen. Wie Sie sehen können, ist dieser
Code etwas verwirrend. Und normalerweise
werden Sie nicht oft mit
mehrdimensionalen
Arrays arbeiten .
Idealerweise gibt es bessere
Lösungen für den Umgang mit Ihren Daten, insbesondere wenn Ihre Daten
drei oder mehr
Dimensionen benötigen Arrays, es wird normalerweise
immer
eine bessere Lösung geben , als
so viele verschachtelte Arrays zu verwenden. Aber um hier vollständig zu sein, werde
ich
Ihnen zeigen, wie Sie ein verschachteltes Array oder
ein mehrdimensionales
Array durchlaufen verschachteltes Array oder
ein können, mit einem, für jede Schleife,
sage ich für int Array, ich kann nenne dieses Array
einen Doppelpunktwert. Dies wird
jedes einzelne Array durchlaufen. Jetzt haben wir hier
Zugriff auf jedes Array. Für die erste
Iteration wir
für jede Schleife
Zugriff auf diesen Wert. Und dann werden
wir bei der nächsten Iteration Zugriff auf diesen Wert erhalten. Wir können für
jede Schleife in diesem Array einen Standard verwenden. Für Nummer, Doppelpunkt-Array eins. Jetzt
können wir hier die Nummer ausdrucken. Jetzt kann ich das
mit Shift und F2 ausführen. Und hier sehen wir alle sechs
Einzelnummern. Dies ist ein gutes Beispiel, wie ich
im letzten Video erwähnt habe, dass für jede Loops keinen Zugriff auf den Index
haben. Hier sagen wir
diese Testnummer weil wir den Index im Wesentlichen genau hier
verwenden. Beides für jede Loops. Darauf
haben wir nicht unbedingt Zugriff. Wenn Sie auf
den Index zugreifen möchten , um die Testnummer
auszudrucken, müssten Sie einen Standard-For-Loop
verwenden.
24. Varargs: Jetzt, da wir Arrays besser
verstehen, können
wir ein Konzept, das als Varargs
bekannt ist
, angehen . Dies ist eine andere
Möglichkeit,
so viele verschiedene Parameter,
wie Sie möchten, in eine Funktion zu übergeben . Also werde ich eine
sehr einfache Add-Funktion erstellen. Ich kann öffentlich sagen,
static int add. Und hier kann ich int num1, int num2 hier drin haben. Es ist sehr einfach. Wir geben einfach
num1 plus num2 zurück. Um sicherzustellen, dass
alles funktioniert, kann
ich 1015
hinzufügen, und ich kann dies
mit Shift und F11 ausführen. Hier sehen wir die Summe als 25, also scheint alles
zu funktionieren. Aber was ist, wenn ich hier eine andere Nummer
oder mehrere verschiedene
Zahlen hinzufügen
möchte, so viele ich möchte. Das Problem hier
ist, dass ich jetzt einen individuellen Parameter
hinzufügen für jeden einzelnen Eingang und sich möglicherweise eine Reihe von Eingaben ändern
könnte. Nun, das Konzept der
Varargs löst das. Wir können im Wesentlichen
eine beliebige Anzahl von Ganzzahlen
in unsere Parameter übergeben . Zum Beispiel kann ich
int drei Punkte und
dann Nymphen oder Zahlen sagen ,
welche Sie bevorzugen. Zahlen
werden im Wesentlichen ein Array sein. Trotzdem
haben wir keinen Zugriff mehr auf num1, num2. Stattdessen
müssen wir jetzt
jedes einzelne
Element dieses Arrays durchlaufen , wie ich schon sagte, int sum ist 0. Und dann kann ich welche zurückgeben. Aber bevor wir zurückkehren, müssen
wir tatsächlich jede einzelne
Zahl zur Summe hinzufügen . Ich kann eine Standard-for-Loop verwenden
oder es kann eine für jede Schleife verwenden. Also für int-Zahl
Doppelpunktzahlen. Und dann kann ich sagen, dass Summe plus gleich Zahl
ist. Jetzt kann ich das
machen und wir sollten die Summe all
dieser Zahlen
genau hier sehen , die bei 53 Uhr. Wir können dies sogar auf so
viele oder so wenige
Argumente senken , wie wir wollen. Zum Beispiel kann ich einfach
Zinn haben und es wird
zehn ausdrucken. Eine Sache, die man beachten
sollte, ist, dass Varargs das
allerletzte Argument sein
müssen. Denn wenn wir hier
zusätzliche Dinge hätten, aus welchem
Grund auch immer
wir, haben wir hier eine Ganzzahl der
Schüler. Es weiß nicht, wo der
Anfang ist und wo sie aufhören. Wenn wir zusätzliche
Argumente haben, müssen wir sie vor den Varargs
hinzufügen. Varargs
sollten immer ganz am Ende sein. Es weiß also, wo sie anfangen, und es weiß,
dass auf jeden
weiteren übergebenen Parameter als diese Varargs zugegriffen werden wird. Zum Beispiel
werden zehn hier Studenten sein, und es identifiziert
das genau hier, aber alle zusätzlichen Zahlen hier. Also werden
jetzt nur 515 Teil des
varargs-Parameters sein.
25. Konstanten und Casting: Manchmal möchten Sie möglicherweise nicht, dass Ihre Variablen die Werte
ändern, und manchmal
auch möchten Sie
den Typ der Variablen ändern , um
die Ihre Variablen handelt. Lassen Sie uns zunächst einen Blick auf
etwas
werfen , das als Konstanten bekannt ist. Und das bedeutet im Grunde, dass sich ein variabler Wert nicht ändern kann. Wenn ich sage, dass der
String-Name Alex entspricht, kann
ich dies auf die Konsole
ausdrucken. Und bevor ich das tue, kann
ich das natürlich in
meinen vollständigen Namen ändern , nämlich
Alexander. Aber sagen wir hypothetisch, ich möchte nicht, dass sich dieser
Wert ändert. Ich kann das endgültige Keyword hinzufügen bevor wir unsere Variable erstellen. Und jetzt bekomme ich genau hier einen
Fehler. Wenn ich den Mauszeiger darüber fahre, heißt
es
, dass Sie
einer endgültigen Variablen keinen Wert
zuweisen können . Der Name fragt sich vielleicht, warum würdest du das tun wollen? Warum ändern Sie nicht einfach nicht
den Wert der Variablen? Dies könnte die
offensichtliche Lösung sein,
wenn es um einfache Programme
wie dieses geht. Aber in echten Programmen
, in denen Sie Hunderte von Dateien auf
Hunderttausenden von Codezeilen haben,
möglicherweise sogar
andere Mitarbeiter. Sie erinnern sich vielleicht nicht an
alles, was Ihr Code tut. Und Sie erinnern sich vielleicht auch nicht daran
, dass bestimmte Variablen Nebenwirkungen haben
könnten,
wenn Sie die Werte ändern. Wenn Sie eine Variable
haben deren Werte sich nicht ändern sollten, sollten Sie sie hier zu einer endgültigen
Variablen mit diesem Schlüsselwort machen . Als nächstes zeige ich Ihnen
etwas, das als Casting bekannt ist. Im Grunde genommen können
Sie eine Variable nehmen und sie einer anderen
Variablen eines anderen Typs
zuweisen. Zum Beispiel könnte ich sagen, dass
int amount gleich zehn ist. Und ich kann dann ein
Double erstellen , das
einen Dezimalwert enthält. Deshalb können wir nicht ganze Zahlen
haben. Und ich kann sagen, dass der neue
Betrag gleich ist. Wenn ich jetzt weitermache und einen
neuen Betrag ausdrucke und diesen
mit Shift und FTN ausführe. Wir sehen jetzt zehn Punkte 0. Und in diesem Fall müssen wir
eigentlich nichts werfen, da alle Doubles
technisch gesehen immer noch ganze Zahlen sein können. Aber sobald wir ein Double erstellt haben, wird
es
die Dezimalzahl von 0 hinzufügen, aber nehmen wir an,
dass dies rückgängig gemacht werden würde. Ich kann sagen, dass der doppelte
Betrag 10,5 entspricht. Ich könnte dann sagen, dass int new
amount gleich Betrag ist. Und wir bekommen hier einen Fehler. Wenn ich den Mauszeiger darüber fahre, heißt es, dass der erforderliche Typ eine Ganzzahl ist, aber der Typ als Double angegeben ist. Nun, wir können etwas tun, das als Gießen dieser Ganzzahl
bekannt ist außer dem doppelten Wert
als ganzzahliger Wert. Und dazu können wir
Klammern und
den Variablentyp hinzufügen , in diesem Fall int direkt vor dem Namen
der Zielvariablen
, der in diesem Fall Betrag ist. Wenn ich das jetzt ausführe,
sagen wir jetzt zehn in der
Konsole und nicht 10.5, weil ganze Zahlen
nur ganze Zahlen sein können. Alles, was nicht akzeptabel
ist, zum Beispiel dieser 0.5 wird
einfach ignoriert. Die ganze Zahl, die in diesem Fall
übrig ist, wird
Tin in unsere neue
Betragsvariable genau hier zugeordnet . So
wirft man primitive Werte aus. Und ich werde
den Unterschied zwischen
primitiven und Referenzarten
von Werten in einem zukünftigen Video diskutieren primitiven und Referenzarten . Nehmen wir ein kurzes
Beispiel dafür, wie eine Ganzzahl
in eine Zeichenfolge
konvertiert wird. So
haben wir zum Beispiel eine ganze Zahl zehn, aber wir wollen die Zeichenfolge
zehn, ungefähr so. Nun, ich kann sagen, dass die
Int-Zahl gleich zehn ist. Dann kann ich sagen, string, string ist gleich string mit
einem großen S-Punktwert von. Hier sehen wir
alle verschiedenen
möglichen Parameter, die wir übergeben können. Wir können eine ganze Zahl,
ein Zeichen über Wasser
und so viele andere übergeben . In diesem Fall
wollen wir nur eine Nummer weitergeben. Und dann kann ich die
Zeichenfolge auf die Konsole ausdrucken. Und wenn ich das durchführe,
werden wir zehn als String sehen. Wenn ich jetzt das Gegenteil
machen wollte, kann
ich String sagen, String
ist zehn in Anführungszeichen. Ich könnte dann Int-Nummer sagen. Ich könnte dann Integer mit
einem Kapital sagen I dot parse int. Und hier sehen wir, dass wir eine Schnur einreichen
können. Und diese Top-Funktion wird
auch eine ganze Zahl zurückgeben. Ich kann die
String-Argumente übergeben. Dann kann ich die
Nummer auf die Konsole ausdrucken. Wenn ich das durchführe,
sollten wir immer noch zehn sehen. Aber jetzt ist dies ein
tatsächlicher numerischer Wert. Also wollte ich, dass ich das um eins
erhöhen könnte ,
bevor ich es ausdrucke. Mit C11
haben wir vorher eine
Zahl in eine Zeichenfolge konvertiert, sodass wir diese nicht erhöhen konnten, sobald sie bereits
in String-Form war.
26. Häufige String: An dieser Stelle
solltest du bereits wissen, wie ein Basic ist, wenn Stephen funktioniert. Wenn Sie jedoch jemals versucht haben Strings
mit einer if-Anweisung zu vergleichen, Sie möglicherweise fest, dass sie
nicht richtig funktioniert. Lassen Sie uns zum Beispiel damit beginnen, den Benutzer nach einer Eingabe zu
fragen. Ich könnte sagen, gib deinen Namen ein. Dann erstelle
ich danach einen Scanner. Ich nenne diesen Input. Ich werde das gleich
einem neuen Scanner machen , der
in System dot n passiert. Dies ist alles ziemlich ähnliche
Dinge, die wir zuvor gesehen haben. Ich könnte sagen Stream, Benutzername entspricht dem
Eingabepunkt in der nächsten Zeile. Dadurch wird die gesamte
Zeile abgerufen , die der Benutzer eingegeben hat. Sagen wir jetzt, wenn ich meinen
Namen als Alex eintrage, wird
es dann Hallo Alex sagen. Natürlich könnten
wir in einem echten Programm einfach
den Variablenwert verwenden. Aber ich möchte dies
konkret
in einer if-Aussage tun , um etwas zu
demonstrieren. Ich kann sagen, wenn der Benutzername
genau Alex entspricht, konnte
ich Hello Alex nicht ausdrucken. Ich kann das mit
Shift ausführen und ihn verlassen. Ich könnte dann meinen Namen eingeben
und gebe
die genaue Zeichenfolge ein, nach der wir
suchen, in der if-Anweisung. Also Alex, mit einem Kapital a, wenn ich das eingebe
und dann die Eingabetaste drücke, sehen
wir nichts auf der Konsole
gedruckt. liegt daran, dass
Stärken nicht mit einem
Doppelgleichheitszeichen
verglichen werden können . Wenn ich den Mauszeiger darüber fahre, heißt
es, dass String-Werte mit
Double Equals verglichen
werden und nicht
gleich als Methode. Um Strings zu vergleichen. Anstatt Teig gleich zu verwenden, können
wir die Saite nehmen,
wir können Punkt drücken. Und hier haben wir Zugriff auf eine Reihe verschiedener Funktionen. Wir werden uns ein paar davon gegen Ende dieses Videos ansehen. Aber derjenige, den ich Ihnen
zeigen möchte, heißt Gleich und ist
gleich Ignorieren Fall. Also fangen wir mit Gleichen an. Hier können wir eine andere Zeichenfolge übergeben
, zum Beispiel Alex
und ich können das ausführen. Und ich kann jetzt
Alex mit einem Kapital A betreten und es wird dann Hallo Alex sagen. Wenn ich das noch einmal durchführe, kann ich Alex mit einem Kleinbuchstaben
eintragen und nichts, was wir gedruckt haben. Wenn ich die Großschreibung
einer
der beiden Strings ignorieren wollte , dann kann ich sagen, dass der
Fall ignoriert wird und Alex weitergeben. Wenn ich das ausführe, kann ich Alex jetzt mit einem Kleinbuchstaben
eintragen. Und es wird Hello Alex ausdrucken, weil es sich nicht um die Großschreibung
einer der beiden Strings
kümmern wird. So vergleichen wir zwei Strings innerhalb
einer if-Anweisung. Aber jetzt
schauen wir uns ein paar
andere Beispiele für häufig
verwendete String-Methoden an. Ich werde diesen ganzen Code
löschen. Und ich werde einfach
sagen, dass String Name gleich Alex ist. Und dann werde
ich hier kein
Thema drucken, in Kleinbuchstaben übernehmen. Ich konnte das nicht ausführen
und wir werden Alex
sehen, der ein Kapital hat. Jetzt zeigen wir sie alle
Kleinbuchstaben in der Konsole an. In ähnlicher Weise müssen wir
auch in Großbuchstaben sein. Und wenn ich das durchführe, sehen
wir natürlich Alex in
Großbuchstaben und in der Konsole. Es gibt ein paar
andere Funktionen, die wir haben, wie zum Beispiel die Länge. Wenn ich das ausführe, werden
wir sehen wie viele einzelne Zeichen
sich innerhalb der Zeichenfolge befinden. In diesem Fall ist es für. Und wir können tatsächlich einfach eine Periode am Ende des
Namens
drücken und wir sehen eine Reihe
anderer Methoden, die wir verwenden können. Zum Beispiel können wir hier
ein Zeichen mit einem bestimmten Index erhalten . Hier bekomme ich den Index eins
, der ein Kleinbuchstaben sein sollte. Wenn ich das ausführe, können wir das in unserer Konsole
bestätigen. Hier sehen wir einen
Kleinbuchstaben, in dem ich zurückgegangen bin. Wir haben eine Reihe
anderer Möglichkeiten. Zum Beispiel können wir konkat, was bedeutet, verketten, im Grunde einen
zusätzlichen Teil einer Zeichenfolge hinzuzufügen. Also kann ich
meinen ganzen Nachnamen hier hinzufügen. Und wenn ich das durchführe, sehen wir
jetzt Alex Flores. Und der Platz, der in
der Konsole hinzugefügt wurde , liegt an dem
Speicherplatz, den ich hier hinzugefügt habe. Standardmäßig werden keine Leerzeichen
hinzugefügt. Es wird nur genau das tun
, was du ihm sagst. Fühlen Sie sich frei, hier mit
einigen anderen
String-Funktionen herumzuspielen , hier mit
einigen anderen
String-Funktionen .
Es gibt eine Reihe
nützlicher , die Sie tatsächlich verwenden können, um die Zeichenfolge zu
ändern oder
die Zeichenfolge auf verschiedene Arten zu verwenden.
27. Fluchtsequenzen: Lassen Sie uns nun in
ein anderes String-Konzept eintauchen als Escape-Sequenzen
bekannt Dies werden im Grunde
einzelne Zeichen sein , die
innerhalb von Beschränkungen eine
bestimmte Bedeutung haben . Zum Beispiel kann ich String sagen, string ist gleich hallo
space, world. Ich
drucke das auf die Konsole aus. Und natürlich würde das
einfach Hello World ausdrucken. Aber was ist, wenn ich wollte, dass Hallo und Welt auf verschiedenen Zeilen stehen? Nun, ich kann einen
Schrägstrich n. Jetzt wird dies
eine orange Farbe. liegt daran, dass dies als
Escape-Sequenz für Slash
n bekannt ist, wird ein Zeilenumbruch sein. Um dies zu beweisen, kann ich
es Swift Shift und FTN ausführen. Hier sehen wir Hello World
in der nächsten Zeile. Ein anderer ist Forward Slash n
, der ein Tab sein wird. Nachdem ich zum Beispiel eine neue Zeile
hinzugefügt
habe, kann ich jetzt eine neue Registerkarte hinzufügen. Und ich kann das nochmal machen. Hier sehen wir Hello world, aber die Welt wird jetzt
einmal von einem Tab-Zeichen eingerückt. Wir können auch zwei
Schrägstriche machen, die nur zu einem
einzigen Schrägstrich werden. Aufgrund von Stunden fügen wir
einen einzigen Schrägstrich hinzu. Es wird davon ausgegangen, dass
dies
ein Escape-Charakter oder
eine Escape-Sequenz sein würde. Aber wenn ich einen tatsächlichen
Schrägstrich und die Zeichenfolge wollte, musste
ich diesem Schrägstrich nicht entkommen
, indem ich im Grunde nur
200 Wörter Office hinzufügte. Ich kann das dann ausführen. Hier. Wir sehen jetzt einen
Schrägstrich in der Zeichenfolge. Während
es vorher davon ausgehen wird, dass wir versuchen werden, mit einem Kapital W zu
fliehen, was eigentlich nichts
bedeutet. Also wird es uns jetzt einen Fehler
geben. Wir können auch
doppelten Anführungszeichen entkommen. Dies wird also nur
ein normales doppeltes Zitat. Und der Grund dafür ist,
dass doppelte Anführungszeichen den Anfang oder
das Ende einer Zeichenfolge
darstellen. Wenn ich hier einfach ein doppeltes Zitat
hinzufügen würde, wird
es nicht wissen,
dass dies Teil der Zeichenfolge sein wird. Vielmehr denkt man, dass wir versuchen, die aktuelle Zeichenfolge
als Variable einzufügen. Wenn ich auf die Welt gegangen bin, um in Anführungszeichen zu sein, kann
ich die doppelten Anführungszeichen hinzufügen, aber ich muss ihnen entkommen indem ich vorher eine
Voraussicht hinzufüge. Jetzt sieht das
etwas verwirrend aus. Also werde ich
alle vorherigen
Escape-Sequenzen
durch nur ein einfaches Leerzeichen ersetzen alle vorherigen
Escape-Sequenzen . Jetzt kann ich das ausführen und
wir sollten Hello World sehen,
aber die Welt ist
in doppelte Anführungszeichen eingeschlossen. Jetzt gibt es eine Reihe
anderer
Escape-Sequenzzeichen ,
die Sie verwenden können, aber diese sind bei weitem
die häufigsten. Du wirst es sehen.
28. Der Mathematikkurs und zufällige Zahlen: Werfen wir einen Blick
auf den Mathematikunterricht. Und das hat ein paar
verschiedene Dinge, die wir
tun können , wenn es um
grundlegende mathematische Operationen geht. Das erste Beispiel ist
,
den absoluten Wert einer Zahl zu erhalten , der im Grunde
nur
eine negative Zahl in
eine positive Zahl umwandelt . Aber technischer gesehen wird
dies die Entfernung
von dieser Zahl zu 0
zählen. Ich werde Mathematik
mit einem großen M-Punkt-Abs ausdrucken, was für absoluten Wert steht. Und hier können wir
sehen, dass wir
eine Reihe verschiedener
numerischer Werte übergeben können . In diesem Fall können wir positive zehn
übergehen. Ich bin gegangen, um das zu kopieren und einzufügen
und negative Zehn zu übergeben. Und dann kann ich das
mit Shift und FTN ausführen. Und hier sehen wir in beiden Fällen
Zinn. Grundsätzlich wird
dies nur eine negative
Zahl
in eine positive Zahl umwandeln . Ich gehe weiter
und kommentiere das aus. Zukunft kann ich mindestens mathematische Punkte
ausdrucken. Und dies wird bei
zwei Zahlen desselben Typs annehmen , und dies wird den
Mindestwert zwischen ihnen zurückgeben. Zum Beispiel kann ich 107 übergeben auch math.max
ausdrucken, was ein ähnliches Konzept ist, aber wir werden den
Maximalwert zwischen ihnen zurückgeben. Ich kann auch hier
107 zurückgeben. Wenn ich das zum ersten Mal durchführe, werden
wir sieben bekommen
, weil das der Mindestwert ist. Aber das zweite Mal werden
wir zehn bekommen ,
weil das der maximale Wert ist
. Wenn wir nun Mathe-Punkt sagen und
all dies durchgehen würden, gibt es eine Reihe
verschiedener mathematischer Operationen. Sie sind also vielleicht vertraut
, je nachdem, wie erfahren Sie
mit Mathematik in der Schule sind. Aber einige grundlegendere
Beispiele werden Floor sein, der im Grunde nur die Zahl
abgerundet wird. Und es versiegelt auch, was eine Nummer hochlaufen wird. Zum Beispiel kann ich 0.2 bestehen. Ich kann das hier
rausdrucken. Dann kann ich auch
Math.Floor ausdrucken und ich
kann 0,9 passieren. Wenn ich das jetzt
in unserer Konsole ausführe, werden
wir
eins und auch 0 sehen. Das wird sich zusammenrunden, egal was passiert, es spielt keine Rolle, ob es niedriger als fünf ist. Und es wird
abrunden, egal was passiert, es spielt keine Rolle, ob es
höher oder gleich fünf ist. Eine weitere Sache, die ich dir zeigen
wollte, ist, wie man eine Zufallszahl
generiert. Es gibt zwei Möglichkeiten, dies zu tun. Es gibt einen älteren
Weg,
den Sie höchstwahrscheinlich hinter
einer Zeit in der Arbeit mit
anderem Code sehen einer Zeit in der Arbeit mit werden, indem Sie
anderen Tutorials folgen. Und es gibt einen neueren Weg. Der ältere Weg, kann ich sagen, int
random ist gleich neuem Zufall mit einem großen R Klammern hier beim Drücken von Alt und
Enter, um dies zu importieren, könnte
ich dann NextInt sagen. Ich kann dann
zufällig auf die Konsole ausdrucken. Wenn ich das ausführe, kriegen wir
eine Zufallszahl. Offensichtlich wird dies eine beliebige Zufallszahl
erzeugen, aber das wollen wir nicht
unbedingt. Oft wollen wir, dass
etwas zwischen 010 nur 0100 ist, solche
Dinge. Also können wir hier
eine ganze Zahl übergeben. Zum Beispiel, zehn, führe uns aus. Es wird jetzt
eine Zufallszahl zwischen 09 erzeugen. Aber wenn wir
eins bis zehn wollten, können
wir einfach
eins zum Ende hinzufügen. Wenn ich das nochmal mache, sehen wir
hier zwei. Ich weiß nicht, ob ich
das weiter führe, wir werden
deine Zufallszahl zwischen 110 bekommen . Dies ist die alte
Art, dies zu tun. Es gibt einen neuen Weg. Also wusste die Zufallszahl, ich könnte sagen, int
random gleich thread, lokaler zufälliger Punkt,
aktueller Punkt nächstes int. Und das funktioniert
genau wie zuvor. Und auch mit der alten
und der neuen Art dieses Wochenendes generieren Sie
andere Zufallswerte, zum Beispiel Booleans. Wenn wir einen zufälligen
Wahr- oder Falschwert wollten
, der
von Zeit zu Zeit auftauchen wird. Sie können den nächsten Booleschen Wert verwenden. Als nächstes kannst du Ram bekommen, Doubles und andere
Dinge wie diese. Aber zum Beispiel können wir
hier
ein int passieren und dann wird die
Grenze zehn sein, und wir fügen einen
am Ende hinzu. Und ich kann dann
zufällig auf die Konsole ausdrucken. Dies sind also die zwei
verschiedenen Möglichkeiten,
Zufallszahlen in
Ihrem Java-Programm zu generieren .
29. Primitive vs. Primitive: Dieses Video wird
etwas
fortgeschrittener sein als frühere Videos. Wir werden etwas
über primitive und
Referenztypvariablen erfahren und wie bestimmte Variablen im Speicher gespeichert
werden. Also werde ich
mein Projekt genau hier minimieren. Wir haben also mehr Platz
für diese Diagramme. Hier haben wir den Stack und
hier haben wir den Haufen. Dies sind zwei
verschiedene Orte, an denen Informationen
im Speicher Ihres Computers gespeichert werden können. Wir sprechen zunächst
über primitive Typwerte. Zum Beispiel könnte ich sagen, dass
int number gleich zehn ist. Dies wird als
primitiver Typ Evalue der
Regel
grundlegende Informationen speichern. Alle primitiven Typwerte werden direkt auf dem Stack
gespeichert, und dies geht von
unten nach oben. Andere Beispiele wären Boolean. Ich kann sagen, ist Programmierung
gleich wahr? Ich kann dann Char
Letter gleich a haben. Ich kann ein Double haben,
ich kann das Pi nennen. Und das entspricht 3,14159. Und dies sind die wichtigsten primitiven Typwerte, die
Sie sehen werden. Lass mich zurückgehen. Lassen Sie mich ein paar davon löschen und
gehen wir zurück zu unserer Nummer. Aber was passiert, wenn ich eine Zahl
zuweisen
würde , die dem
Wert von Nummer eins entspricht. Zum Beispiel wird Nummer zwei
gleich der kühnsten Zahl tatsächlich noch einen
völlig neuen Wert auf dem Stapel erzeugen. Jetzt entspricht Nummer zwei
dem Wert der Zahl. Was würde passieren,
wenn ich
den Wert der Nummer eins ändern würde
, der sich auf Nummer zwei auswirkt, werde
ich die Nummer ausgeben. Und dann drucke
ich in der nächsten Zeile Nummer zwei aus. Zuvor sage ich,
dass Zahl gleich 15 ist. Was hier passieren wird, ist,
weil es sich um
zwei separate Werte handelt. Nummer zwei wird
überhaupt nicht betroffen sein. Das wird also
15 und dann zehn drucken. Um dies zu beweisen, kann ich
es mit Shift und FTN ausführen. Hier sehen wir 1510. Primitive Typen haben also ihren eigenen individuellen
Wert auf dem Stack, auch wenn wir ihn
einer vorhandenen Variablen zuweisen. Dadurch wird einfach
eine andere Variable im Speicher
Ihres Computers erstellt und diesen Wert
zugewiesen. Dies bedeutet, dass Zeile
acht eine separate Ganzzahl
erstellt , die
überhaupt keine Korrelation mit dieser Zeilennummer sieben hat , abgesehen von der Tatsache, dass sie den gleichen Wert haben. Das ist nett, aber was
ist ein Referenztyp? Und während der Haufen benutzt wurde. Also
lasse ich diesen ganzen Code hier und
erstelle ein ganzzahliges Array. Ich kann sagen, dass int-Zahlen
gleich 51015 sind. Und das wird
sowohl
auf dem Stack als auch auf dem Heap etwas erzeugen . Die Werte 51015
werden jedoch auf dem Heap gespeichert. Und die variablen Zahlen werden auf dem Stack gespeichert. Aber dies wird nur etwas
speichern, das als Zeiger
bekannt ist. Nicht die genauen Details darüber,
wie Zeiger hinter
den Kulissen funktionieren , sind
bei der Arbeit mit Java nicht allzu wichtig, da Java
viel davon für uns erledigt. Aber das wird im Grunde genommen nur auf den tatsächlichen Wert hinweisen , der auf dem Heap gespeichert ist. Zum Beispiel kann ich hier
ein anderes Array erstellen. Ich kann dieses Beispiel nennen. Ich kann das auf Zahlen setzen. Was hier passiert, sind
unsere Array-Werte 51015. Es existiert immer noch nur einmal
im Speicher unseres Computers. Und diese drei
Werte werden
im Heap als Array gespeichert . Die Variablen,
Zahlen und Beispiele werden jedoch auf dem Stack
gespeichert, aber sie sind jetzt
Zeiger , die auf das
Array von Ganzzahlen verweisen. Das heißt, wenn wir 510 oder 15
ändern, werden
wir diese Änderung tatsächlich
sehen,
unabhängig davon, auf welche Variable
wir zugreifen möchten, ob es sich um
Zahlen oder Beispiel handelt. Um dies zu beweisen,
kann ich Zahlen sagen, Index eins, der hier die Zehn
sein wird, gleich 11 ist. Ich kann dann Zahlen
ausdrucken index1. Und dann kann ich Beispielindex eins
ausdrucken. Ich kann das mit
Shift und FTN ausführen. Hier sehen wir 11 in beiden Fällen. liegt daran, dass
diese drei Werte hier nur einmal auf
dem Heap gespeichert werden. Und dann
zeigen das
Zahlen-Array und das Beispiel von Ray nur auf diesen Wert. heißt, wir haben zwei
separate Variablen , die wir hier sehen, wenn Sie Ihren Code
ausführen, aber die Werte werden
nur einmal im Heap gespeichert. Und das ist ein Unterschied zwischen primitiven und Referenztypen. Referenztypen haben
ihre Werte nur einmal im Heap mit
einem Zeiger auf den Stapel. Aber primitive Typen
sind so einfach, dass wir
die Werte einfach auf dem Stack speichern können. Also kann ich sagen, int
num1 ist gleich fünf, int num2 ist zehn. Und dann
rufe ich eine Add-Funktion auf, die
hier in einer Sekunde erstellt wird, und ich werde 510 übergeben. außerhalb unserer
Hauptfunktion gehe, kann ich sagen public, static int add, int
num1, int num2. Hier kann ich num1 plus num2
zurückgeben. Was hier passieren wird
ist, wenn wir 510 übergeben, werden tatsächlich zwei weitere Variablen
auf dem Stack namens num1
erstellt und
num2 die gleichen genauen Werte zuweisen wie die Argumente, die wir sind
geht genau hier rein. Um dies zu beweisen, drucke
ich nach
unserer Add-Funktion Nummer
eins mit einem Komma und dann num2 aus . Aber innerhalb unserer Add-Funktion werde
ich sagen, dass
Num1 gleich zehn ist. Wenn ich das jetzt durchführe, sehen
wir jetzt 510. Aber wir haben tatsächlich
Num eins gleich zehn geändert. Und tatsächlich die Summe
der Add-Funktion. Wenn ich dies in
eine Print-Erklärung einfügen würde, wird
dies 20 ausdrucken. Wenn ich also diese
wärmere Zeit mit den
20 in der Konsole und dann 510 laufe , brechen Sie dies
nur Zeile für Zeile auf, falls es für Sie
verwirrend ist. Wurden zuerst
zwei Variablen erstellt, die auf dem Stack
gespeichert sind , 510. Wir denken, die Summe
auszudrucken und 510 zu übergehen. Beachten Sie, dass wir zu
keinem Zeitpunkt Nummer 1,
Num2 ändern . Das ist wichtig zu beachten,
wenn wir Zeile zehn erreichen, als wir Num1
und Num2 an die Konsole weitergegeben haben. Diese beiden Variablen ändern sich überhaupt
nicht. Sobald wir
die Add-Funktion tatsächlich aufrufen, übergeben
wir 510, wodurch zwei weitere
Variablen
erstellt werden , die auf einem Stack gespeichert sind. Und wir
ändern einfach die erste Zahl oder das erste Argument genau
hier auf den Wert von zehn. Im Wesentlichen bedeutet
, dass wir
zehn hinzufügen , was auch immer das
zweite Argument ist, was in diesem Fall zehn ist, und deshalb
bekommen wir 20 genau hier. Nun ist der wichtige Teil
dabei, dass wir das allererste
Argument
ändern, das übergeben wurde, aber dies hat eine
brandneue Ganzzahl. Primitive Typen
werden gerade ihren Wert übergeben. Und es wird im Grunde
nur eine Kopie dieses Wertes sein. Alle Änderungen an diesen
innerhalb der Funktion wirken sich nicht auf die Funktion aus,
die sie ursprünglich aufgerufen hat. Grundsätzlich ändern wir hier
unser erstes Argument. Aber es ändert eigentlich
nichts von unserer Hauptfunktion. liegt daran, dass es
sich um primitive Typen handelt und nur der Wert übergeben wird. Aber was passiert, wenn wir ein Array von Ganzzahlen übergeben
? Zum Beispiel haben wir ein
Array mit nur zwei Werten. Anstelle von num1 und num2 kann
ich sagen, dass
int-Zahlen gleich 510 sind. Ich könnte dann Zahlen einreichen. Und dann protokolliere ich
Nummernindex 0 und Zahlen Index eins. Jetzt haben wir ein Problem
mit unserer Funktion, da sie Kürzungen zwei
verschiedene Ganzzahlen erwarteten. Stattdessen möchte ich nur
zwei Zahlen
aus einem Zahlenarray zusammenfügen , wie ich sage int,
Klammern, Zahlen. Dann kann ich Zahlen,
Index 0 plus Zahlen und X1 zurückgeben . ******* führe das
mit Shift und F11 aus. Hier sollten wir
sowohl die
ausgedruckten als auch jede einzelne
Nummer sehen , wie wir genau hier sehen. Aber was würde passieren, wenn ich den Zahlenindex 0 auf zehn
ändere, was ursprünglich
fünf in diesem Array ist, denken Sie daran, dass dieses Array
überhaupt nicht geändert wird. Und wir geben das erste Element des Arrays genau hier
in dieses
Konsolenprotokoll weiter. Wenn ich das ausführe, sagen wir
jetzt, dass 20
als Summe ausgedruckt werden Kf
den ersten Index
mit Index 0
, der fünf ist, auf den
Wert von tan genau hier ändern den ersten Index
mit Index 0
, . Das heißt, wir
drucken im Grunde zehn plus zehn aus. Aber dann wird nun der Zahlenindex 0 geändert, der auf die Konsole
gedruckt
wird. liegt daran, dass der
Verweis oder der Zeiger auf dieses Array als Argument übergeben
wird, nicht als tatsächliche
Werte selbst. Wenn wir also zum
Zahlenindex 0 ändern gehen, ändert
es tatsächlich dasselbe Array
,
das online erstellt haben fünf,
weil wir nur den Zeiger übergeben, weil wir nur den Zeiger übergeben der sich auf einem Stapel befindet, der sich auf einem Stapel ändert
es tatsächlich dasselbe Array
,
das wir online erstellt haben fünf,
weil wir nur den Zeiger übergeben, der sich auf einem Stapel befindet, der sich auf einem Stapel
befindet
zeigt nur auf
die tatsächlichen Werte , die auf dem Heap gespeichert sind. Und dies ist ein wichtiger
Unterschied zwischen primitiven und Referenztypen wenn Sie
mit Funktionen arbeiten.
Es ist wichtig zu
wissen, dass wenn Sie etwas als Argument
ändern, zum Beispiel
Int-Zahlen genau hier, dass es das
mit dem Rest
Ihres Programms ändern könnte oder nicht , je nachdem, ob es einen Primitiv- oder Referenztyp handelt. Jetzt sind viele dieser Konzepte neu und ich weiß, dass dies
wahrscheinlich eines der
verwirrenderen Konzepte ist wahrscheinlich eines der
verwirrenderen Konzepte wenn es um die Programmierung geht. Wenn Sie neu in der Programmierung sind. Wenn Sie also
Probleme haben, schlage
ich vor, sich
diese Lektion
noch einmal anzusehen und zu versuchen, sich
auf den Stapel und den Heap bei
visuellen Darstellungen zu konzentrieren auf den Stapel und den Heap bei , um alles zu erklären.
30. Grundlagen der Objektorientierung: Wir werden jetzt
in ein Konzept eintauchen, das
als objektorientierte Programmierung bekannt ist . Und eine kurze Art, dies zu
sagen, ist Hoop oder OOP. Und hier wird Java definitiv
viel
interessanter und wir können damit tatsächlich einige reale
Programme
erstellen. Aber lasst uns zuerst darüber sprechen, was objektorientierte Programmierung
ist? Nun, das ist ein Konzept, das nicht exklusiv für Java
ist. Andere Programmiersprachen
haben diese Konstante ebenfalls. Dies ist im Grunde der
Ort, an dem wir
reale Objekte
in unserem Code darstellen können . Und in diesen kommenden Videos werde
ich erklären, was weitere Keywords bedeuten, wie Klasse und Statik,
und andere Keywords, die ich erwähnt habe, die ich später
erklären werde. Werfen wir schnell
einen Blick darauf, was eine Klasse im Vergleich zu einem Objekt ist. Klasse wird im Grunde
der tatsächliche Code sein ,
der den Blueprint
einer bestimmten Art von
Funktionalität oder eines
bestimmten Objekttyps darstellt der den Blueprint
einer bestimmten Art von . Wenn ich jetzt Blueprint sage, möchte
ich, dass du dir
einen Hausesentwurf überlegst. Wenn Sie beispielsweise
jemals einen Haufen
Häuser sehen, die einander
ähnlich aussehen,
gibt es nur einen, einen einzigen
Entwurf, den sie
im Grunde kopieren und eingefügt haben. Und jedes Haus wird
sein eigenes Objekt sein. Ein Haus wird
ein Objekt sein oder die Blaupause wird
die Klasse sein. So können wir eine
Mini-Instanzen
jeder einzelnen Klasse haben und
diese werden als Objekte bezeichnet. Was
dieses Hausbeispiel tatsächlich in
einem echten Programmierbeispiel
in unserem Hauptpaket
verwendet einem echten Programmierbeispiel hat, kann ich mit der rechten Maustaste klicken. Ich kann hier zu New und dann zur
Java-Klasse gehen. Ich werde dieses Haus nennen, aber ich werde
eine Pascal-Fallnotation verwenden, was
im Grunde bedeutet, dass wir
den allerersten Buchstaben
jedes Wortes großschreiben . Wenn ich Hausbeispiel hätte, würden
sowohl das H als auch das E groß geschrieben. Aber in diesem Fall möchte ich nur Kreditklasse namens House machen. Fahren Sie fort und drücken Sie die Eingabetaste und es sollte sich automatisch öffnen. Und jetzt können
wir innerhalb dieser Klasse
oder innerhalb dieses Blueprints verschiedene Eigenschaften hinzufügen. Was ist jetzt eine Immobilie? Dies sind im Grunde Variablen
und Methoden, die
in dieser Hausklasse
spezifisch definiert sind . Und es hilft uns, auf
verschiedene Werte zuzugreifen oder mit
unterschiedlichen Funktionen
im Kontext eines Hauses zu arbeiten . Eintauchen in viel mehr Details
darüber, was in den nächsten Videos tatsächlich in einen Hauskurs
gehen würde . Aber lassen
Sie uns zunächst einen kurzen
Blick darauf werfen, wie diese Hausklasse
tatsächlich in
unserer Hauptklasse genutzt werden kann . Ich lösche
einige dieser Kommentare. Ich kann jetzt Haus
mit einem Kapital H. sagen und hier sehen wir,
dass es versuchen wird, aus unserem
lokalen Dateisystem zu
importieren. Ich kann fortfahren und die Eingabetaste drücken, und hier können wir
unsere Variable benennen. In diesem Fall sage ich
Haus mit einem Kleinbuchstaben h, ich werde uns
gleich einem neuen Haus zuweisen. Jetzt ist das neue Keyword Teil der objektorientierten
Programmierung und Klassen, aber die Details
dazu werden später erklärt. Moment können wir uns vorstellen, im Grunde nur ein neues Haus
haben, eine Hausklasse hier. Dies wird die Blaupause
sein, aber jetzt haben wir tatsächlich
eine echte Instanz unseres Hauses geschaffen . Nehmen wir ein sehr einfaches Beispiel indem wir das Haus helloworld
drucken lassen. Ich kann sagen „öffentlich nichtig“. Und beachte, dass wir hier
keine Statik haben. Ich erkläre den
Unterschied zwischen statischen und nicht statischen
Methoden in ein paar Videos. Aber füge vorerst nicht
statisch in dieses Beispiel ein. Also öffentlich, nichtig, drucken. Und dann habe ich
keine Parameter. Ich drucke einfach Hello World auf die Konsole
aus. Wenn ich jetzt den Mauszeiger darüber fahre, sehen
wir, dass die
Methodendrucke niemals verwendet werden. Lass uns weitermachen und versuchen es zu benutzen. Wenn wir
hier wieder in unsere Hauptklasse gehen, haben wir Zugang
zu diesem Haus. Ich kann sagen, dass House eine Periode drückt. Dies wird
ein Dropdown-Menü mit
allen verfügbaren Eigenschaften und
Methoden haben , auf die wir zugreifen können. In diesem Fall haben wir Zugriff
auf unsere Druckfunktion. Ich kann fortfahren und die Eingabetaste drücken, und ich führe das aus. Und hier sehen wir Hello
World in der Konsole. Ich
benenne diese Variable um. Ich kann irgendwo
innerhalb des Variablennamens klicken, und ich kann die Umschalttaste gedrückt halten und gleichzeitig F6
drücken. Jetzt können wir weitermachen
und dies ändern. Ich werde diesen Namen in
mein Haus mit einem Großbuchstaben
H und Kleinbuchstaben ändern . Jetzt erstelle ich
eine brandneue Variable. Wie ich schon sagte, House. Dein
Haus ist gleich einem neuen Haus. Und diese beiden Variablen haben
nichts gemeinsam, abgesehen von der Tatsache, dass sie mit derselben Klasse
erstellt wurden. Im Grunde sind sie
Nachbarn zueinander, aber sie sind nicht dasselbe Haus. Wenn dein Nachbar ein
ähnliches Haus wie dein hat, heißt das nicht, dass
es dein Haus ist. Wenn nur ein ähnliches Haus auf derselben Blaupause basiert
. Zum Beispiel kann ich
deinen House Dot Print sagen. Und ich kann weitermachen und das machen. Und jetzt werden wir zwei Instanzen von
HelloWorld und unserer Konsole
sehen ,
wie wir genau hier sehen. Dies ist die
Grundlagen von Klassen und wie man Objekte
um diese Klassen herum erstellt. Und in den nächsten Videos werden
wir viel weiter
in die objektorientierte
Programmierung
eintauchen , wo wir ein
funktionales Hausobjekt erstellen können , das wirklich ein
tatsächliches Haus in
unseren Programmen.
31. Konstrukteure: Wir werden jetzt über
ein Konzept namens Konstruktoren sprechen , das im Grunde
nur
eine integrierte Methode
in jede Klasse sein wird, die ausgeführt oder aufgerufen wird, wenn eine neue Instanz dieser
Klasse erstellt. Es gibt tatsächlich einen
Standardkonstruktor in jeder einzelnen Klasse. Ob wir
selbst einen erstellen oder nicht, es wird
automatisch einen haben. Also als Konstruktor, wir werden uns so etwas wie eine Methode
ansehen, aber etwas anders,
weil es keinen Rückgabetyp haben würde,
wie zum Beispiel die Leere genau hier. Und auch der
Konstruktorname
muss der genaue Name der Klasse sein. Ich kann also sagen, öffentliches
Haus mit einem Kapital H. Dies ist jetzt
als unser Konstrukteur bekannt. Um dies zu beweisen,
werde ich ausdrucken ein neues Haus geschaffen wurde. Und ich führe
das in unserer Konsole aus. Hier sehen wir, dass ein neues Haus
gebaut wurde, weil wir
hier
eine neue Instanz unserer
Hausklasse als Variable mein Haus geschaffen haben hier
eine neue Instanz unserer
Hausklasse . Und so wurde
der Konstruktor in unserer Printing
Out Hello World
ausgeführt. Aber dann schaffen wir
ein anderes Haus, was bedeutet, dass der andere
Konstruktor Rampe ist. Und dann
drucken wir natürlich wieder Hello World aus. Jetzt
kann ein Konstruktor nichts zurückgeben, aber er kann keine
anderen Parameter aufnehmen. Zum Beispiel kann ich den Namen des
String-Besitzers haben. Dann kann ich sagen, dass ein
neues Haus geschaffen wurde. Der Besitzer ist wie ein Name des Inhabers
hinzufügen. Jetzt haben wir hier zwei verwandte
Probleme. Das liegt daran, dass
wir
in unserer Hauptklasse keine Argumente weitergeben
. So kann
es zum Beispiel hier einen Alex passieren. Natürlich kannst du deinen eigenen Namen hinzufügen
. Und hier werde
ich Bob einreichen. Natürlich kannst du
jeden anderen Namen hinzufügen, den du willst. Wenn ich das mache, können wir
uns jetzt unsere Konsole ansehen. Und hier sehen wir, dass ein
neues Haus gebaut wurde. Der Besitzer ist Alex. Und das liegt daran, dass wir hier eine neue Instanz
einer Hausklasse
erstellt haben. Und wir haben einen ALEKS als
String an unseren Konstruktor übergeben. Und wenn
wir dann ein Bobs Haus bauen, sehen
wir natürlich, dass der Besitzer
Bob und die Konsole ist. Ähnlich wie Methoden können
Konstruktoren jetzt außer Kraft gesetzt werden, sodass wir
verschiedene Arten
von Werten in die Parameter übergeben können . Wie ich schon sagte, öffentliches Haus. Ich konnte keine Fußböden sagen. Hier könnte ich ausdrucken
neues Haus wurde gemacht. Es hat ich kann auf
Böden hinzufügen und das kann
auf den Stringböden hinzufügen. Und ich werde auch
Klammern um das S stellen weil wir vielleicht in
einem einstöckigen Haus vorbeikommen. Jetzt haben wir zwei
verschiedene Konstruktoren, und diese werden zu verschiedenen Zeiten
ausgeführt. Sichern Sie zum Beispiel Bobs Haus. Anstatt in Bob zu kommen, mache
ich das zu
einem zweistöckigen Haus. Möglicherweise stellen Sie fest, dass IntelliJ
automatisch
feststellen wird , dass dies jetzt der Parameter „Floors“ sein wird
. Dies wird kein Eigentümer sein, so
genannt wird, wie es hier heißt. daran, dass es versteht
, dass wir
den Konstruktor überschreiben , um zwei verschiedene
Arten von Variablen zu übergeben . Und hier
geben wir eine ganze Zahl weiter. Das bedeutet also, dass
wir
diesen Konstruktor genau hier verwenden werden . Wenn ich das jetzt betreibe und wenn
wir in unsere Konsole schauen, sehen
wir jetzt, dass die erste Instanz unseres Hauses ausdrucken
wird. Der Besitzer ist Alex. Aber die zweite Instanz
unseres Hauses
wird ausdrucken und
hat zwei Etagen. liegt daran, dass wir
den verschiedenen
Konstruktortyp verwenden , der nur ganze Zahlen
weitergibt. In diesem Beispiel haben
wir gerade etwas Text
ausgedruckt, aber in echten Anwendungsfällen, die wir uns in ein paar Videos ansehen
werden. Wir werden diese
im Grunde
als Setup-Funktionen verwenden , um sicherzustellen, dass alles andere
eingerichtet ist und ordnungsgemäß
funktioniert, damit unser
Haus funktioniert.
32. Das „diese“ Keyword und die Eigenschaften: Wir werden uns nun das Schlüsselwort
ansehen und wie
verschiedene Eigenschaften erstellt werden
, wie
verschiedene Eigenschaften erstellt die im Grunde nur Variablen
innerhalb unserer Klasse sein werden. Ich werde
diese Kommentare hier los. Und ich werde
diese Print-Anweisungen auch
innerhalb unserer beiden Konstruktoren loswerden . Jetzt innerhalb unserer Klasse, aber außerhalb der Funktionen, erstelle
ich ein
paar verschiedene Variablen. Zum Beispiel könnte ich eine
private Zeichenfolge mit einem
Kapital S, Eigentümernamen, sagen . Ich konnte keine
privaten Int-Floors sagen. Und der private Teil davon sowie die Öffentlichkeit über einige
dieser Methoden
werden in einem zukünftigen Video erklärt. Jetzt habe ich bereits demonstriert wie wir
Konstruktoren überlasten können. In diesem Fall
möchten wir jedoch nur einen einzigen Konstruktor bei dem beide
Informationen weitergegeben werden. Hier kann ich Int Floors sagen. Und jetzt möchte
ich
den neuen Eigentümernamen und die neuen Stockwerke von
den Parametern
unseren lokalen Variablen zuweisen neuen Stockwerke von
den Parametern . Da diese beiden
Variablen hier
verschiedene Variablen sind , dann sind
unsere Parameter genau hier. Aber bevor ich das mache, haben wir zwei verwandte Probleme,
denn wenn ich zurückgehe, verwenden
wir jetzt eine falsche
Syntax für einen Konstruktor. Nehmen wir an, mein
Haus hat zwei Stockwerke,
es sei denn, dass dies
immer noch ein Bobs Haus ist, dem Sie natürlich
jede gewünschte Zeichenfolge verwenden können,
aber es sind auch zwei Stockwerke. Wenn wir also zurück in
die Hausklasse gehen, haben
wir keine Probleme mehr. Aber wie werden wir den Namen des Besitzers online
so
einstellen dass er dem Parameter entspricht, der übergeben wird. Weil sie natürlich genau
den gleichen Namen haben. den Namen des Besitzers sagen, entspricht dem Namen des
Besitzers, tut nichts
wirklich. Es ändert die
Zeile für überhaupt nicht, da dies auf
die lokalste
Variable im Bereich verweisen wird, die in diesem Fall nur der Parameter unter dem
Namen ist. Technisch gesehen könnten wir die Namen
dieser Variablen
ändern, sodass sie nicht genau gleich sind, aber das ist nicht die
richtige Lösung. Die korrekteste
Lösung würde nur sagen, dass dieser Punktbesitzer gleich dem Namen des Besitzers entspricht und diese
Punktböden gleich Kraft sind. Was passiert eigentlich hier? Nun, das repräsentiert
das aktuelle Objekt. Wann immer dieser Konstrukteur für mein Haus geführt
wird, das den Besitzernamen
Alex und zwei Etagen trägt. Das, dieses Schlüsselwort hier
bezieht sich
genau hier auf das my house
Objekt. Wenn wir Bobs Haus erstellen
, wird dieses Objekt
hier genau hier auf Ihr
Hausobjekt
verweisen. Das Schlüsselwort, dieses Schlüsselwort
hier wird
das aktuelle Objekt darstellen , das für diese Klasse verwendet
wird. Um dies innerhalb
unserer Druckfunktion zu beweisen, kann
ich sagen, dass dieses
Haus im Besitz ist. Ich könnte dann den Namen des Punktbesitzers
ausdrucken. Und es hat plus diese
Punktgeschosskraft. Natürlich lege ich Klammern
um das S, nur für den
Fall, dass du in einem einstöckigen Haus vorbeigehen willst. Jetzt verwenden wir
diese Druckfunktion immer noch, wie Sie hier sehen können. Ich gehe weiter
und führe dieses Programm aus. Und hier sehen wir, dass
dieses Haus im Besitz
von Alex ist und es zwei Etagen hat. Wir sehen auch, dass dieses Haus im Besitz
von Bob war und es zwei Etagen hat. Die Namen und die
Anzahl der Stockwerke werden
lokal gespeichert. Genau hier. Wir greifen nicht auf
die Parameter zu
, die wir hier hinzugefügt haben, da diese
Bounced sind, auf die nur innerhalb des Bereichs des
Konstruktors
zugegriffen wird . Im Grunde haben wir also
unsere eigenen Parameter oder unsere eigenen Variablen
innerhalb dieser Klasse. Wir weisen
diese zu, wenn wir das Objekt
aus dem Konstruktor
erstellen. Und dann können wir
überall in
dieser Klasse auf diese Variablen zugreifen . Zum Beispiel, innerhalb
dieser Druckfunktion, indem diesen
Punkt-Besitzer-Namen
sagen und das Zeug Kriege. Technisch gesehen ist dieses Schlüsselwort
in diesem Anwendungsfall für die Druckfunktion optional, für die Druckfunktion optional,
da es standardmäßig
davon ausgeht, dass wir
die aktuelle Instanz
der Klasse verwenden werden davon ausgeht, dass wir
die aktuelle Instanz
der Klasse verwenden . Also kann ich weitermachen
und diese löschen. Und wenn ich das
noch einmal mache, wird
es genau genauso funktionieren. Technisch gesehen ist dies keine gute Praxis, da es
sehr deutlich
macht, dass wir versuchen, auf in der Klasse
gespeicherte Variablen zuzugreifen, aber technisch optional in diesem Fall der
printf-Funktion. Aber unser Konstruktor muss
diese benötigt werden, da sie genau
dieselben Variablennamen
wie unser Parameter haben . Um ganz klar zu sein, welchen Werten wir
zuweisen, welche Variablen. Wir können diesen
Punkt auf ihrem Namen sagen, um hier auf unsere lokale
private Zeichenfolge zu verweisen. Und diese Punktbeläge
die WHO referenziert hier
unsere lokale private Ganzzahl. Und weisen Sie diese dann dem Namen des
Besitzers am Umfang zu. Und der Fußboden-Parameter.
33. Verkapselung, Abstraktion, Getter und Setter: weiter in die
objektorientierte Programmierung eintauchen, Wenn wir weiter in die
objektorientierte Programmierung eintauchen, werden
wir nun zwei weitere Konzepte
vorstellen ,
die
etwas verwirrender werden, aber hoffentlich kann ich sie
gut genug erklären , damit Sie
es voll und ganz verstehe. Diese beiden Konzepte
werden sowohl als Verkapselung als
auch als Obstraktion bezeichnet. Aber wir werfen auch einen
Blick auf Getter und Setter, die ein
Beispiel für Abstraktion sind. Verkapselung wird
im Grunde ein Konzept der
objektorientierten Programmierung
sein bei dem wir möchten, dass alle
unsere Funktionen an
einem einzigen Ort
eingekapselt werden . Und selbst eine Klasse selbst ist ein Beispiel für
Verkapselung. Zum Beispiel
haben wir hier eine Hausklasse. Also jede Funktionalität, die wir in Bezug auf ein Haus haben werden, z. B. wie viele Türen es hat, wie viele Stockwerke es hat, verschiedene Fenster und Räume
und andere Dinge wie diese. Grundsätzlich sollte alles, was
mit einem Haus zu tun innerhalb dieser Hausklasse
eingeschlossen oder eingekapselt sein. Jetzt ist ein anderes Konzept
so etwas wie ein Medikament
oder eine Pille, bei der alle Funktionen einer einzigen Pille
eingekapselt sind. Das bedeutet, dass die Benutzer
dieser Klasse oder die Personen, die das Medikament
einnehmen, nicht unbedingt
das Innenleben wissen müssen , alles. Sie müssen nur
das äußere Objekt sehen und wissen, dass alles innen
eingekapselt ist. Das ist eher ein
Konzept, das nicht
wirklich klar demonstriert
werden kann , aber es ist wichtig zu verstehen, dass
Sie beim
Schreiben Ihres eigenen Java-Codes möchten, dass alles in
seiner eigenen Klasse gekapselt. Jetzt
ist das nächste Konzept die Abstraktion, die der Verkapselung etwas
ähnlich ist. Aber im Grunde
bedeutet dies, dass Sie nur möchten, dass der Benutzer, der die Klasse
verwendet,
Zugriff auf Dinge erhält, die er
tatsächlich benötigt. Zum Beispiel werde ich diese privaten Immobilien
hier in öffentlich umstellen. Und ich erkläre in diesem Video, was privat gegen öffentlich ist. Aber im Moment folgen Sie einfach
und ändern Sie diese in die Öffentlichkeit. Und jetzt innerhalb unserer Hauptdatei, nachdem ich das erste Haus erstellt habe, aber bevor ich es ausdrucke, kann
ich meinen Hauspunkt sagen. Jetzt haben wir hier Zugriff auf alle Eigenschaften und
Methoden innerhalb dieser Klasse. Und wir können den
Namen des Besitzers und die Böden sehen. Ich kann den Namen des
Besitzers in Bob ändern. Sagen wir, Bob entführt zum Beispiel einfach
mein Haus. Und wenn ich das mache,
sehen wir Bob jetzt zweimal im Kausal, wie wir genau hier sehen. Jetzt ist das technisch gesehen
eine schlechte Praxis. Und ich werde diese Variablen
wieder auf privat
ändern , indem Control Z oder
Command Z auf einem Mac
verwende. Und jetzt sehen wir ein
verwandtes Problem. Wenn ich den Mauszeiger hier darüber fahre, heißt
es, der Name des Besitzers hat einen privaten Zugang innerhalb des Com-Punkt-abgenutzten
Schlüssels Dot House. Also werde ich diese
Codezeile hier entfernen. Und jetzt können wir nicht
direkt darauf zugreifen, wem
das Haus gehört , ohne tatsächlich im Haus
zu sein. Zum Beispiel könnte ich sagen, dass
dieser Punktname Bob entspricht, und das würde gut funktionieren. Und das liegt daran, dass das
Privateigentum hier
etwas ist , das als
Zugriffsmodifikator bezeichnet wird. Dies wird den Zugriff
beschränken, den bestimmte Dinge haben,
wenn es um
verschiedene Eigenschaften
und Methoden geht . Eine private Methode oder
Privateigentum bedeutet in diesem Fall, dass das
einzige, was darauf zugreifen
kann, Dinge innerhalb
derselben exakten Klasse sind. Deshalb können
wir sowohl hier als auch
hier darauf zugreifen . Obwohl es privat ist, sind
wir immer noch in der Klasse. Das ist auch der Grund, warum wir
den Fehler genau hier hatten. Worauf ich versuche darauf
zuzugreifen, weil wir nicht in
der Hausklasse sind. Wir befinden uns in der
Warnock Keys Kursklasse oder wie auch immer Sie Ihre Klasse
genannt haben. Nun
bedeutet öffentlich, wie Sie wahrscheinlich vermuten
können, dass alles
darauf zugreifen kann , indem er auf sein eigenes Objekt zugreift. Zum Beispiel haben wir
einen öffentlichen nichtigen Druck. Diese Methode ist öffentlich, was bedeutet, dass wir dann auf die
Druckmethode zugreifen können, wenn
wir ein
Objekt
für diese Klasse haben, zum Beispiel mein
Haus oder Ihr Haus . Jetzt
fragen Sie sich vielleicht, warum Sie nicht einfach direkt auf
alles zugreifen, was wir wollen. Warum beschränken Sie bestimmten Zugriff? Nun, das ist das
ganze Konzept hinter Abstraktion wird
im Grunde die
gesamte innere Funktionalität
und die Funktionsweise des Hauses nutzen und Ihnen
nur Zugang zu dem geben, was das Haus
notwendig ist führe seinen Job aus. Jetzt können
Sie in einigen Situationen mit
Gettern und Settern inneren Zugriff auf
bestimmte Dinge gewähren , die wir uns hier in Kürze
ansehen werden. In der Regel sollten
Sie jedoch als
gute Faustregel nur Zugriff
auf das gewähren , was unbedingt erforderlich ist. Und Sie sollten niemals direkten
Zugriff
auf Variablen wie diese gewähren. Stattdessen sollten Sie immer Getter und Setter
verwenden. Werfen wir einen kurzen
Blick darauf, wie das funktioniert. Ich kann öffentlich sagen, String get. Jetzt wird
es
das Konzept des Besitzernamens bekommen automatisch ausfüllen , was
ich hier verwenden werde. Der Grund, warum ich das wusste, ist , dass
es eine Zeichenfolge zurückgeben wird. Und wenn ich Git tippe, wird
davon ausgegangen, dass
etwas erstellt wird, das
als Getter-Methode bekannt ist. Im Grunde ist dies
nur eine Methode, die eine private Eigenschaft
zurückgibt. In diesem Fall kann ich den Namen des Besitzers
zurückgeben. Jetzt kann ich tatsächlich
auf den Eigentümernamen zugreifen , der von
dieser Getter-Methode privat ist. Wir haben auch Setter-Methoden, was ein ähnliches Konzept ist, aber offensichtlich bekommen wir den Wert
nicht. Stattdessen untersuchen wir
den Wert, wie ich schon sagte, öffentlich nichtig, weil wir
nichts zurückgeben. Legen Sie den Namen des Besitzers hier fest. Es wird
einen Parameter haben. Ich kann den Namen des String-Besitzers sagen. Und dann kann ich sagen, dass dieser Punktbesitzer
gleich dem Namen des Besitzers entspricht. Wenn ich wollte, kann
ich tatsächlich zu mir
nach Hause gehen, wie ich schon sagte, mein Haus-Punktset-Besitzer. Ich kann Joe überholen. Und wenn ich das mache, sehen
wir Joe
und Bob in der Konsole. Und tatsächlich sehen wir
Bob zweimal wegen eines Fehlers, den ich hier in
der Druckfunktion gemacht habe. Als Beispiel sagte ich, dass
wir das hier benutzen können. Ich werde das löschen
und dann das
Programm noch einmal ausführen. Und jetzt sehen wir Joe und
Bob in der Konsole. Dies ist ein Beispiel für eine Getter-Methode und
eine Setter-Methode. Jetzt
fragen Sie sich vielleicht, warum Sie sich
mit einem dieser
Getter und Setter beschäftigen . Warum entfernen Sie
diese Funktionen nicht einfach komplett und
machen Sie einfach unsere Immobilien öffentlich? Als ich zum ersten Mal
objektorientierte Programmierung lernte, hatte
ich genau die
gleiche Frage und war sehr verwirrt. Warum funktioniert all diese zusätzliche Arbeit und nur für die
gleichen genauen Ergebnisse. Aber als ich im Laufe der Jahre
immer mehr Code schrieb, wurde
mir klar, dass die Verwendung von Gettern
und Settern viel
bequemer ist und
die Dinge viel organisierter macht. Stellen Sie sich zum Beispiel vor
, wir haben ein sehr großes Projekt
mit Dutzenden von Häusern. Oliver, unser Projekt,
und wir möchten
alle Namen der Eigentümer in, sagen
wir in Großbuchstaben, ändern . Oder wir möchten
alle Besitzernamen protokollieren wenn sie geändert werden
oder ähnliches. Ich möchte eine Art von
Funktionalität ausführen , wenn sich der Name des
Besitzers geändert hat. Hier können wir beispielsweise sagen, dass dieser Name des Besitzers gleich dem Namen
des Besitzers Punkt TupperCase entspricht. Und um die Dinge
noch komfortabler zu machen, können
wir eine Zeile zehn
direkt hier ändern, in dem der Name des Besitzers
gleich Name ist, um den Eigentümernamen festzulegen. Sie den Namen des Besitzers ein. Dies wird es
zum Standardkonstruktor machen wird es auch in Großbuchstaben
sein. Wenn ich das mache, sollten wir
sowohl auf unseren Namen als auch in Großbuchstaben sehen . Und wenn wir alles ohne
Getter oder Setter
öffentlich gemacht hätten
und wir Dutzende von Häusern
in einem größeren Projekt hätten, müssten
wir alle unsere
Namen manuell in Großbuchstaben
ändern. was sehr mühsam
und sehr nervig klingt. Aber weil wir
die richtigen
Abstraktionsregeln verwenden und Getter und Setter mit privaten
Eigenschaften verwenden. Wir haben jetzt die
Möglichkeit,
bestimmte Aspekte unseres Programms einfach bestimmte Aspekte unseres Programms von einer einzigen
Änderung aus zu ändern.
34. Vererbung: Werfen wir einen Blick auf etwas, das als Erbschaft
bekannt ist. Dies ist im Grunde genommen der Ort, an
dem wir eine andere Klasse hinzufügen oder
erweitern können , um
ihr mehr Funktionalität zu geben. Zum Beispiel kann ich
einen neuen Java-Kurs machen und rufe dieses Hotel an. Und ich werde das Haus verlängern. Wie ich schon sagte, erweitert Haus. Dies bedeutet, dass
die
gesamte Funktionalität
innerhalb der Hausklasse erbt wird . Aber dann können wir mehr
Funktionalität und Seite hinzufügen. Zum Beispiel können wir jetzt
einen Lobbyisten angeben ,
oder die Anzahl der Mitarbeiter,
Dinge wie diese, dass es ein
Haus nicht hat, aber ein Haus wird
immer noch einen Eigentümer haben und eine bestimmte Anzahl von Etagen
, die ein Hotel auch hat. Anstatt eine Hotelklasse zu machen
, in der diese
Immobilien enthalten wären, werden
wir nur ein Haus erweitern das bereits über
diese Immobilien verfügt. Auf diese Weise müssen wir sie nicht
wirklich noch einmal machen. Aber wir bekommen
diesen Fehler hier. Wenn ich den Mauszeiger
darüber fahre,
heißt es, dass kein
Standardkonstruktor verfügbar ist. Wenn wir zum Haus gehen, sehen
wir, dass es keinen
Standardkonstruktor gibt,
was bedeutet, dass es keinen Konstruktor
gab , der 0 Parameter hat. Also haben wir diese beiden
Parameter genau hier, den Namen des Besitzers und die Etagen. Und das bedeutet, dass unser Hotel, das Haus erweitert, auch einen
ähnlichen Konstrukteur haben muss. Ich kann also öffentlich, Hotel,
String, Name des Besitzers
und dann Int-Floors sagen . Jetzt bekommen wir einen weiteren Fehler. Wenn ich den Mauszeiger darüber fahre, heißt
es, dass kein
Standardkonstruktor verfügbar ist. Dies bedeutet, dass wir etwas verwenden
müssen, das als Super-Methode
bekannt ist. Wenn ich also Superhelden nenne, könnte
ich dann den Namen und die Etagen des
Besitzers übergeben. Und die Superfunktion
wird nur innerhalb von Klassen
verwendet , die eine andere Klasse
erweitern. Dies wird im Grunde nur den Konstruktor
der Klasse
nennen , die wir
in diesem Fall erweitern. Jetzt haben wir
einen Hotelkonstruktor geschaffen. Dies wird einen Konstruktor
des Hauskonstruktors
nennen . Daher werden wir die privaten Eigenschaften
des Eigentümernamens und der Etagen
auf die Immobilien
festlegen des Eigentümernamens und der Etagen , an denen
wir weitergeben. In diesem Fall werden wir
einfach diese und
vom Hotelbauer
weitergeben. Wenn das
verwirrend erscheint, machen Sie sich keine Sorgen, machen
wir
eine neue Hotelinstanz, und danach wird es viel
sinnvoller sein. Hier in unserer Hauptklasse sage
ich das Hotel. Mein Hotel ist gleich einem neuen Hotel. Wir können dann den Besitzer weitergeben. Und dann die Anzahl der
Etagen, sagen wir zehn. Ich kann jetzt meinen
Hotelpunkt ausdrucken, bekommt den Namen des Besitzers. Aber innerhalb der Hotelklasse haben
wir überhaupt keinen Namen des
Besitzers. liegt daran, dass wir die Hausklasse immer noch
erweitern alle vorherigen
Funktionen innerhalb
dieser Klasse
erben . Holen Sie sich beispielsweise den Namen des Besitzers. Wenn ich das ausführen
würde, druckt
es natürlich einfach
Alex auf die Konsole. Ich werde dich nicht
mit diesem einfachen Konzept langweilen. Ich bin sicher, dass du das verstehst. Aber lassen Sie uns weiter darüber eingehen, wie diese Konstruktoren funktionieren und
wie die Super-Methode funktioniert. Grundsätzlich gebe
ich ALEKS und Zinn als Parameter an den
Hotelkonstruktor weiter. Daher werden der
Name und die Stockwerke des Besitzers Alex
sein und zehn riefen
dann super an, was den Konstruktor
der erweiterten Klasse
aufrufen wird . In diesem Fall ist das Haus. Im Wesentlichen werden wir diese Funktion genau hier
aufrufen, wodurch diese auf
private Immobilien
gleich Alex und zehn festgelegt werden . Jetzt können wir
innerhalb des Hotels darauf zugreifen, wenn sie
öffentlich sind oder etwas, das als geschützt bezeichnet
wird. Bisher haben wir
privat und öffentlich gesehen. Es gab auch
eine andere, die geschützt ist. Zum Beispiel innerhalb
des Konstruktors. Ich kann
diesen Namen des Besitzers nicht ausdrucken. Wir sehen im Dropdown-Menü hier, dass es keine Option gibt. Und auch wenn ich es einfach
so lasse , werden
wir einen Fehler bekommen. Wenn ich den Mauszeiger darüber fahre, heißt es, Name des
Besitzers privaten Zugriff hat. liegt daran, dass der
private Zugang bedeutet nur Dinge,
die direkt in
dieser Klasse darauf zugreifen können. Nicht unbedingt Dinge
, die diese Klasse erweitern. Wenn wir möchten, dass die
erweiterten Klassen darauf zugreifen, können
wir privat wechseln,
um sie zu schützen. Jetzt verschwindet der Fehler und schützt es im Grunde
bedeutet, dass alles innerhalb der Klasse ihn
verwenden kann, sowie alle Klassen, die
diese Klasse erweitern, ihn verwenden können.
35. Polymorphismus: Sprechen wir jetzt über ein Konzept, das als Polymorphismus
bekannt ist. Dies
bedeutet im Grunde viele Formen weil Poly viele bedeutet
und Morphismus Formen bedeutet. Um einen Blick auf das Problem zu werfen
, das der Polymorphismus löst. Hier haben wir das mein
Hotelobjekt sowie Ihr Hausobjekt
und mein Hausobjekt. Diese beiden verwenden
die Druckfunktion. Und weil das Hotel das Haus
erweitert, haben
wir jetzt Zugriff auf
die Druckfunktion. Ich kann meinen Hotel-Punktdruck sagen. Wenn ich das jetzt führe, sehen
wir, dass die Häuser jeder Person gehören und es so viele Stockwerke
hat. Das Hotel
sagt immer noch, dass die Häuser besaßen. Wir möchten grundsätzlich
die exakte Funktionalität für
die Druckfunktion
innerhalb der Hotelklasse außer Kraft setzen die exakte Funktionalität für . wir dazu schnell einen Blick auf die Hausklasse. Unser Druck fungiert
als öffentlicher ungültiger Druck. Unsere Hotelklasse muss genau
dieselbe Funktion haben. Ich kann öffentlich sagen, nichtig, print. Und jetzt kopiere
ich der Einfachheit halber einfach die
vorherige Zeile
und füge sie hier ein. Ich kann Control C
unter Windows oder Command C auf Mac verwenden. Und dann kann ich weitermachen und
Control V unter Windows
oder Command V auf Mac verwenden . Jetzt erhalten wir eine Fehlermeldung, da diese beiden Eigenschaften
privat sind und
nicht geschützt sind. Also muss ich die
entsprechenden Getter benutzen. Also könnte ich den Namen des Besitzers abrufen sagen. Wir haben noch kein Geschenk
für seine Methode. Wenn ich also Git Floors sage, existiert
es nicht wirklich. Und mach eins. Es sollte ziemlich einfach sein, ich denke ein öffentliches Int
Get Flores hier drin, ich kann einfach falsch zurückgeben. Jetzt haben wir einen Getter
, den wir benutzen können. Innerhalb des Hotels. Wir
haben hier keinen Fehler mehr. Wir können uns ändern. Das Haus befindet sich im Besitz von zwei, das Hotel ist unvoreingenommen. Wenn ich das jetzt betreibe und
wir uns unsere Konsole ansehen, sehen wir
hier, dass das Hotel
im Besitz von Alex ist und
es zehn Stockwerke hat, oder die vorherigen
Hausobjekte sagen immer noch Haus. Das ist der Polymorphismus, dass wir viele Formen
derselben exakten Funktion haben. Also hier haben wir eine
Druckfunktion in unserem Haus, und hier haben wir eine
printf-Funktion in unserem Hotel. Wann immer wir versuchen,
auf eine Druckfunktion zuzugreifen, verwenden
wir immer die der genauen Klasse
am nächsten. Zum Beispiel, da wir
diese printf-Funktion haben , wird
sie diese verwenden. Aber vorher
hatte es es nicht. Es würde also auf die
Hausklasse schauen , die wir erweitern. Und natürlich hatte House
eine printf-Funktion. Also würde es das dann benutzen. Dies wird jetzt auch als Konzept des Überschreibens von Methoden bezeichnet. Jetzt ist dies nicht dazu gedacht, mit
Methodenüberlastung zu
verwechseln. Hier haben wir zwei
Methoden mit demselben genauen Namen, aber vielleicht unterschiedlichen
Parametern. Zum Beispiel kann ich öffentlich, void,
print
sagen , und als Argument kann
ich int times sagen. Hier werde ich eine bestimmte Anzahl von
Malen
durchlaufen , je nachdem, wie
oft passiert ist. Ich kann sagen, dass für int a gleich 0 ist, während a weniger als
mal plus a. Jetzt hier drin könnte ich diese
Zeile einfach hier
kopieren und einfügen, oder ich kann einfach die Druckfunktion
aufrufen. Wenn wir jetzt
zu unserer Hauptklasse zurückkehren, drucken
wir das einfach,
aber wir können auch sagen, dass mein Hotel
Dot Print und Pass in fünf Jahren ist. Und jetzt kann ich das ausführen. Und hier sehen wir, dass es fünf verschiedene Male
ausgedruckt wird. Jetzt sehen wir natürlich
fünfmal genau hier. Aber wir haben auch dieses
sechste Mal an der Spitze. Und das liegt daran, dass wir
genau hier
meinen Hotel-Punktdruck
ohne tatsächliche Argumente sagen . Daher wird es
die normale
printf-Funktion verwenden , die wir erstellt haben. Jetzt haben wir bereits die
Methodenüberladung überarbeitet. Das ist keine wirkliche Auffrischung. Dies soll nur
klarstellen, dass das
Überschreiben der Methode anders ist
als das Überladen von Methoden. Offensichtlich können sie verwirrt werden, weil es ähnliche Wörter gibt, aber es sind verschiedene
Konzepte, wie Sie hier sehen können.
36. Das „statische“ Keyword: Bisher haben wir verschiedene
Eigenschaften innerhalb unserer Klassen, zum Beispiel
Eigentümernamen und Etagen. Und diese werden
an
jedes einzelne Objekt gebunden sein , das wir erstellen. Zum Beispiel mein Haus, dein Haus und mein Hotel. Ich werde kein neues Keyword
einführen, nämlich das statische Schlüsselwort, das Sie hier vielleicht sehen. Dies wird
die Eigenschaften im Grunde
nicht an die
einzelnen Objekte binden , sondern die Verbindungen von Eigenschaften
an die Klasse selbst. Jetzt ist jedes einzelne
Haus anders, daher fällt es mir schwer,
ein statisches Beispiel zu beschreiben , wenn
es um Häuser geht. Also werden wir stattdessen Vögel
benutzen. Ich kann mit der rechten Maustaste auf
neue Java-Klasse klicken Und ich
nenne das einen Vogel. Sagen wir nun, dass jeder Vogel seinen eigenen Namen haben
wird. Also kann ich einen privaten
String-Typ sagen. Und dann kann ich hier
public bird bei einem Konstruktor sagen, wir können hier eine Zeichenfolge
namens type haben. Und dann können wir innerhalb des
Konstruktors
den lokalen Variablentyp gleich
den
vom Konstruktor übergebenen Parametern zuweisen den lokalen Variablentyp gleich
den . Hier kann ich sagen, dass dieser
Punkttyp gleich Typ ist. Bisher scheint alles
ziemlich einfach zu sein, Lass uns in meine Hauptklasse gehen und ich werde diese kommentieren. Wir werden sie in
zukünftigen Videos auskommentieren , wenn wir zum Hausbeispiel
zurückkehren. Aber auch hier ist Statik viel
einfacher zu verstehen und für mich zu erklären,
ohne Häuser zu benutzen. Hier kann ich Vogel sagen,
Vogel ist gleich einem neuen Vogel. Ich habe Zugang zu einem Vogel, aber jetzt habe ich den Pass
in einem bestimmten Typ. Zum Beispiel kann ich eine Krähe
einreichen, und jetzt haben wir
Zugang zu einem Vogel. Bisher scheint alles ziemlich
normal zu sein. Nun kommen statische Eigenschaften
wie Variablen und Methoden auf, sobald Sie
etwas auf die Klasse selbst abprallen möchten. Wie bereits erwähnt,
hat das Haus den Namen des Eigentümers
und die Etagen, die an jedes einzelne Objekt
gebunden sind an jedes einzelne Objekt
gebunden aus dieser Hausklasse
erstellt wurde. Also in unserer Hauptakte
hier haben wir mein Haus, das es auf den
Eigenschaften des Besitzers
und der Etagen haben wird. Und dann wird Ihr Haus verschiedene Eigenschaften
haben, auch als älterer
Name und Etagen bezeichnet werden. Und mein Hotel hatte das Gleiche , weil dies
die Hausklasse verlängert. Aber wenn ich hier in Bird gehe, kann
ich etwas erstellen, das als statische Variable
bekannt ist. Wie ich schon sagte, öffentlich, statisch, int wings ist gleich zwei. Wenn ich jetzt wieder in
meine Hauptdatei gehe, wenn ich auf Bird Wings zugreife, sehen
wir, dass es nicht
wirklich existiert. liegt daran, dass
die statischen Variablen
nicht an die
Objekte Vogel selbst gebunden sind . Das Objekt ist dieses Objekt
, das wir genau hier erstellt haben. Stattdessen sind sie
an die eigentliche Klasse gebunden. Also Vogelflügel. Wenn ich das jetzt durchführe, werden
wir die Anzahl
der Flügel in diesem Vogelhaus sehen . In diesem Fall sind es zwei. Aber warum sollte man hier statisch verwenden anstatt nur
eine normale Variable zu erstellen? Lasst uns, weil dies nur ein einziges Mal
erstellt wird. Und ansonsten, zum
Beispiel mit dem String-Typ, wird
diese Variable hier jedes Mal erstellt, wenn wir eine neue Instanz
unserer Bird-Klasse erstellen. Zurück zum Hausbeispiel haben
wir drei verschiedene
Instanzen von Eigentümernamen und Etagen, da wir nicht
drei verschiedene Objekte haben , die sie verwenden werden. Aber wenn ich drei
verschiedene Vögel hätte, hätten
wir immer noch nur
eine ganze Zahl namens wings. Statische Variablen wie
diese hier
werden also verwendet, wenn Sie eine Klasse haben, die über eine gemeinsame Information
verfügt. So haben Vögel zum Beispiel hier zwei Flügel und das wird sich
nie ändern. Es als lokale
Variablen wie
private int wings zu haben , ist gleich zwei. Es ergibt nicht allzu viel Sinn , weil sich das nie ändern
wird. Daher brauchen wir
nicht
eine Flügelvariable, die an
jedes einzelne
Objekt gebunden ist, das wir erstellen. Stattdessen können wir
es einfach direkt an die Klasse binden. Jetzt können wir auch
statische Methoden haben. Ich kann sagen, public, static, int, get wings zum Beispiel. Hier können wir
einfach Flügel zurückgeben. In der Regel werden statische Methoden nur
dann verwendet, wenn Sie versuchen auf statische
Variablen oder eine Art von
Funktionalität zuzugreifen oder diese zu verwenden oder
Dinge wie einen einfachen
Getter genau hier zurückzugeben . Jetzt in meiner Hauptklasse kann
ich keine
Vogelpunkt-gekommene Flügel ausdrucken. Und natürlich wird dies das gleiche Ergebnis
haben weil wir einfach dieselbe Variable
zurückgeben, aber ähnlich dem variablen
Vogelpunkt gibt es Get Wings nicht wirklich. Denn wiederum sind statische Eigenschaften und statische Methoden an die Klasse
gebunden nicht an das aus der Klasse
erstellte Objekt gebunden.
37. Abstrakte Kurse: Bisher haben wir uns normale Kurse
wie unser Haus, unseren Vogel und
unsere Hotelklassen angeschaut wie unser Haus, unseren . Aber jetzt werfen wir einen
Blick auf etwas als abstrakte Klassen
bekannt ist. Dies ist eine andere
Art von Klasse , die wir nicht direkt verwenden können. Wenn ich zum Beispiel
zu meiner Vogelklasse
gehe und dies zu einer öffentlichen
abstrakten Klasse mache, passiert hier
nichts direkt. Alles sieht normal aus. Wenn wir jedoch
zu unserer Hauptdatei zurückkehren, haben wir
hier einen Fehler,
da wir abstrakte Klassen nicht direkt verwenden können. Dies sind Klassen, die
nur für Klassen verwendet
werden sollen , die sie erweitern. Zum Beispiel kann ich hier
eine neue Klasse machen und ich
nenne das eine Krähe. Dies wird die Vogelklasse
erweitern. Verlängert Vogel. Und jetzt müssen wir
unseren eigenen Konstruktor erstellen da wir hier einen nicht standardmäßigen
Konstruktor haben. Ich kann also sagen,
dass öffentlich der Parameter genau derselbe ist wie Vogel. So können wir, wie wir hier sehen
können, wenn
wir in unsere CHRO-Klasse zurückgehen, diese
Superfunktion als Typ übergeben aufrufen. Jetzt
sollten alle Pfeile verschwinden. Wenn wir wieder in
unsere Hauptklasse gehen. Und anstatt
Vogel direkt zu benutzen, werde
ich jetzt Cro sagen, gro ist gleich einem neuen CRO. Jetzt haben wir Zugriff darauf und das hatten
wir immer noch in einer Zeichenfolge
übergeben. In diesem Fall
geben wir den Namen Crow weiter. Und das ist technisch gesehen ein Vogel
, weil Cro Bird verlängert. Aber warum sollten Sie
eine abstrakte Klasse haben wollen , die erweitert werden
muss? Wir können dies nicht direkt verwenden. Nun, hier kommt
das Konzept der abstrakten Funktionen ins Spiel. Also kann ich hier zum Beispiel öffentlich abstrakt
sagen, nichtig. Ich kann das Singh nennen. Und ich werde keinen Funktionskörper
einschließen. Wenn ich das machen würde, haben
wir einen Fehler. Wenn ich den Mauszeiger darüber fahre
und jetzt heißt es, dass abstrakte Methoden
kein Töpfchen haben können. Also hier
werde ich nur
die Deklaration einer Funktion erstellen , aber es ist kein Körper
daran gebunden. Jetzt hatte jede Klasse Ausdehnungen, die Vogelklasse ist gezwungen, diese Sink-Funktion zu
erweitern. Wenn ich zurück zu einer Krähe gehe, haben wir
hier einen Fehler. Wenn ich den Mauszeiger darüber fahre, heißt es, dass
die Klasse Crow entweder als abstrakt
deklariert werden muss oder
die abstrakten Methoden implementieren muss. ich hier in Bert sehe, kann ich öffentlich
sagen, nichtig, singen. Ich kann dann ein Geräusch ausdrucken
, das eine Krähe machen könnte. Zum Beispiel das. Wenn ich jetzt wieder
in meine Hauptdatei gehe, kann
ich jetzt Crow Dot Sünde sagen. Und wenn ich das mache, werden
wir
sehen, dass wir dies auf die Konsole
gedruckt haben. Sagen wir jetzt, ich habe
eine andere Klasse hier. Ich nenne das einen Robin. Ich kann diesen Extend-Vogel haben. So können wir unseren
eigenen Konstruktor erstellen. Also public Robin, String-Typ. Dann können wir diese beiden
Super-Methode übergeben , die wir
den Konstruktor von Bird nennen werden. Jetzt müssen wir die toString-Methode immer noch überschreiben
. Öffentliche Leere, singe. Hier drucke ich Tweet
aus, tweet. Und jetzt kann ich eine
Robin-Instanz machen, indem ich sage Robin, Robin ist gleich neuem Robin und
passiert Robin hier. Und dann kann ich jetzt Robin Dot Sünde
sagen. Wenn ich das mache, werden
wir
die beiden verschiedenen Geräusche sehen , die Vögel machen werden. Und das ist nützlich, da die Vogelklasse
eine abstrakte Klasse ist, was bedeutet, dass sie viel Setup hat, aber nicht direkt verwendet werden
soll. Es soll
mit anderen Klassen verwendet werden , die eine
bestimmte Funktionalität haben werden. Zum Beispiel könnte jeder Vogel ein etwas anderes Geräusch
machen. Und deshalb wollen wir jeden
Vogeltyp
zwingen , diese
Funktionalität direkt zu implementieren.
38. Benutzeroberflächen: Werfen wir nun einen
Blick auf Interfaces, die ähnliche
Konzepte wie abstrakte Klassen
haben, die sich nur ansehen müssten. Aber sie haben einige
wichtige Unterschiede. Zum Beispiel haben wir hier
eine abstrakte Vogelklasse. Und abstrakte Klassen
haben normalerweise nur normale
Dinge innerhalb von Klassen, zum Beispiel verschiedene
Methoden und Variablen. Normalerweise haben wir jedoch auch eine abstrakte Funktion
, die jede Klasse , die die Vogelklasse
erweitert, implementieren muss. Wir haben uns
das im letzten Video
mit unserer CRO- und Robin-Klasse angeschaut , wo wir jetzt die Sing-Methode
überschreiben müssen. Eine Sache, die Sie
beachten sollten, ist, dass jede Klasse in Java nur
eine andere Klasse erweitern kann, aber wir können so viele
Schnittstellen verwenden, wie wir möchten. Zum Beispiel werde
ich hier in meinem Projekt eine neue Java-Klasse erstellen. Und ich werde das genau hier in ein Interface umwandeln. Und ich
nenne dieses Tier. Jetzt können
wir innerhalb dieses Tieres keinen Konstruktor haben,
zum Beispiel ein öffentliches Tier. Dies wird einen Fehler verursachen. Die einzigen Methoden, die wir
hier haben können , sind abstrakte Methoden. Nehmen wir an, ich möchte, dass meine Robin- und Cro-Klasse
diese Tierschnittstelle implementiert. Dies bedeutet auch, dass jedes Tier, das ich in Zukunft herstelle, sei es Kühe, Hunde, Schlangen, irgendetwas umsetzen
muss. Dies sollte also nur Dinge
enthalten, die für jedes einzelne Tier
spezifisch sind , sagen
wir öffentliche Int,
durchschnittliche Lebensdauer. Und wieder werden
dies abstrakte Methoden sein. Also kann ich
hier keinen
eigentlichen Funktionskörper schreiben , weil
dies wiederum eine Schnittstelle ist. Wir können nur selbst
Funktionen haben. Aber wenn ich
zum Beispiel in die Mikroklasse gehe , kann ich
diese Geräte tierisch machen. Jetzt bekommen wir einen Fehler. Wenn ich den Mauszeiger darüber fahre, heißt es, Klasse Crow muss
entweder als
abstrakt deklariert werden oder
die durchschnittliche
Lebensdauer der abstrakten Methode im Tier implementieren . Hier kann ich sagen, öffentliche
Int durchschnittliche Lebensdauer. Und das wird acht
zurückgeben. Jetzt bekommen wir nirgends
einen Fehler mehr. Ich gehe zu meinem Robin, ich kann jetzt sagen „implements animal“. Wir müssten genau das
Gleiche tun. Public int, durchschnittliche Lebensdauer. Hier kann ich zurückkehren. Jetzt kann ich in
meine Hauptdatei zurückkehren und durchschnittliche Lebensdauer des Wachstumspunkts
ausdrucken, und ich kann die durchschnittliche Lebensdauer von Robin
Dot ausdrucken. wir das ausführen, werden
wir jeweils 82 sehen. Und Sie denken vielleicht, dass wir
genau das gleiche Konzept
erreichen können genau das gleiche Konzept
erreichen nur die Funktion hinzufügen, die
eine abstrakte Methode
zu unserer Bird-Klasse hat . Und das stimmt. Und danach sind Klassen in gewisser Weise
den Schnittstellen ähnlich. Der Hauptunterschied besteht jedoch
darin, dass Sie normalerweise eine Schnittstelle verwenden
möchten wenn Sie nur abstrakte Funktionen haben und keine
anderen Funktionen haben. Und ein wesentlicher Unterschied besteht hier, wie ich bereits erwähnt habe,
darin, dass wir
so viele verschiedene
Schnittstellen implementieren können , wie wir wollen. Wenn ich zum Beispiel eine andere
Schnittstelle namens animal to hätte, könnte
ich sie hier implementieren. Diese sind durch Kommas getrennt, aber in Java können wir nur eine einzige Klasse
erweitern. Das ist also ein Vorteil
, den Schnittstellen haben, ist, dass Sie so
viele von ihnen wie möglich verwenden können. In der Regel
möchten Sie also Schnittstellen verwenden es
sei denn, es ist sinnvoll, eine Klasse
tatsächlich zu verwenden. Beispielsweise verfügen Sie über
Standardfunktionalität , die von
jeder einzelnen untergeordneten Klasse geerbt
oder technisch erweitert werden sollte . Wenn Sie jedoch nur diese Funktionen hier
haben, dass jede einzelne
untergeordnete Klasse, wie Robin und Cro, sich selbst überschreiben
und implementieren
sollte, sollten Sie eine Schnittstelle
verwenden.
39. Instanz: Was wäre, wenn Sie bestimmte Arten von
Klassen mit anderen
Klassen
überprüfen wollten ? Zum Beispiel beginne ich
mit
dem Code, mit dem ich im letzten Video aufgehört
habe, aber ich werde
alle
Print-Anweisungen hier loswerden . Wir haben gerade eine
Krähe und ein Rotkehlchen. Ich kann keine
if-Aussage haben, die besagt, wenn eine Krähe eine Instanz eines Vogels
ist, kann
ich Crow ist ein Vogel ausdrucken. Und hier bekommen wir diese Warnung. Wenn ich darüber schwebe, heißt
es, dass konditionierte Wachstumsinzidenz von
Vögeln immer wahr ist. liegt daran, dass diese Zeile
hier nur eine Variable ist,
die wir erstellt haben, aber wir
ändern sie überhaupt nicht. Es weiß mit Sicherheit, dass dies ein Beispiel eines Vogels
ist weil cro Bird erweitert,
wie wir es hier sehen. Wenn ich
das jetzt betreibe, ist es natürlich Co-Investment,
sagen wir, dass eine Krähe ein Vogel ist,
wie wir genau hier sehen. Dies kann aber auch mit Schnittstellen
geschehen. Eine Krähe ist also ein
Beispiel für ein Tier. Wenn ich das jetzt durchführe, erhalten
wir genau
die gleiche Antwort,
wie wir hier sehen. Natürlich
sollten wir den
Satz technisch ändern, um zu sagen, dass eine Krähe ein Tier ist.
Aber du verstehst die Idee. Instanz von kann nützlich sein,
wenn wir prüfen möchten, ob ein bestimmtes Objekt eine Instanz
einer anderen Klasse
oder einer Schnittstelle ist . Und dies ist ein
weiterer Anwendungsfall für Schnittstellen, da Sie
technisch gesehen nicht unbedingt etwas in
Ihrer Schnittstelle
haben müssen und
es immer noch funktioniert. Zum Beispiel implementiert ein Rotkehlchen
immer noch Tier, und die CRO implementiert
immer noch durchschnittliche Lebensdauer der
Tiere
jetzt wird gerade einer normalen Methode
, die an
die Krähenklasse gebunden ist und an die
Robin-Klasse angehängt. Und hat nichts mit
der Tierschnittstelle zu tun. Aber jetzt, da Robin und CRO
beide Tiere sind , weil wir die Schnittstelle
immer noch implementieren. Wir können sie immer noch benutzen
und Schecks wie diese.
40. Enums: Wir
werden uns jetzt von der
objektorientierten Programmierung entfernen und in andere
Aspekte von Java
bewegen. In diesem Video werden
wir beispielsweise etwas über Enums erfahren, was für Aufzählungen steht. Grundsätzlich sind dies
bestimmte Arten von Werten, die wie Variablen sind, jedoch nicht ändern
können und auf sehr
spezifische Weise verwendet werden können. Also lasst uns
weitermachen und hier eine neue Datei erstellen. So können wir die Java-Klasse auswählen. Dann können wir hier Enum auswählen. Ich rufe
diese Wochentage an. Sie können Enums haben, um die
gewünschten Werte zu haben. Aber normalerweise
werden dies
Dinge sein , die sich niemals ändern sollten. Sie sind also technisch nicht wie eine Variable, bei der Sie eine
Eingabe von einem Benutzer oder einer
Art Zufallszahl haben könnten . Dies sind Dinge, die
konkret sein und immer genau auf
die gleiche Weise verwendet werden. Ein gutes Beispiel dafür
sind die Wochentage, die sich nicht ändern werden. Hier füge
ich ein Sonntagskomma hinzu. Mir ist aufgefallen, wie ich
in Großbuchstaben tippe. Dies ist eine übliche Konvention
, wenn Sie tatsächlich Enums verwenden. Dann können wir
Montag, Dienstag, Mittwoch, Donnerstag,
Freitag und Samstag haben. Offensichtlich buchstabiert man richtig. Jetzt haben wir diese sieben verschiedenen
Werte in unserer Aufzählung, aber wie verwenden wir
sie tatsächlich und wie sind sie nützlich? also wieder in
unsere Hauptakte gehe, kann
ich Wochentage Punkte sagen. Und dann kann ich auf
jeden einzelnen Wert zugreifen ,
wenn ich wollte. Oder ich bekomme
sie alle als Array. Hier sehen wir, dass die
Werte-Methode in
Enums integriert ist und Wochentage
als Array zurückgibt. Aber wenn ich zum Beispiel am Freitag
Wochentage ausdrucken
wollte , kann
ich das dann ausführen. Hier sehen wir Freitag
in der Konsole. Wir können diese auch
mit einer if-Anweisung verwenden. Jetzt hat jeder einzelne Aufzählungswert auch eine Reihe
verschiedener Methoden. Zum Beispiel
können wir es mit
einer anderen Instanz von Tagen pro Woche vergleichen . Wir können den Namen bekommen, wir können
die Ordinalzahl bekommen , es sei denn, wir
schauen uns diese beiden Dinge kurz an. Also wollte ich den Namen ausdrucken. Dann kopiere ich diese Zeile
und füge sie ein. Und ich drucke die Ordinalzahl
aus. Wenn ich das hier ausführe, sehen
wir Freitag wieder, und dann wird 55 der eigentliche Index
sein
, dass dies verwendet wird. Zum Beispiel ist Sonntag 0. Jetzt müssen Sie diese Kommentare nicht
hinzufügen, ich mache dies nur,
um es uns einfacher
zu machen , dies tatsächlich zu lesen. Also hier haben wir 012345, und natürlich
wäre Samstag sechs, aber deshalb sehen wir
fünf und unsere Konsole. Ich werde all das
los. Und jetzt lasst uns diese
Aufzählung erweitern. Nehmen wir zum Beispiel an, ich möchte nicht,
dass
Freitag ein Großbuchstaben ist , sondern ich möchte
eine bestimmte Zeichenfolge als
Namen dieses Tages umschreiben . Ähnlich wie Klassen können
Enums tatsächlich einen
eigenen Konstruktor haben. Ich werde ein Semikolon ganz am
Ende aller meine Werte setzen ganz am
Ende aller meine Werte in diesem Fall einen Samstag hatten. Und dann kann ich hier Wochentage
sagen. Jetzt
merken Sie vielleicht, dass ich hier weder
öffentlich noch privat oder
ähnliches habe. liegt daran, dass, wenn ich den
Mauszeiger über diesen Fehler fahre, öffentliche Modifikator hier
nicht erlaubt
ist. Der Grund dafür ist, dass diese
Konstruktorfunktion
hier nur
innerhalb der Enum selbst ausgeführt werden kann. Zum Beispiel innerhalb der
Sonntagsklammer. Hier würden wir
verschiedene Argumente
in den Konstruktor übergeben . Wir können nicht
außerhalb
dieser eNode-Datei auf diesen Konstruktor zugreifen . Aber warum brauchen wir überhaupt einen
Konstruktor? Nun, wir können tatsächlich für jeden
einzelnen Aufzählungswert
unterschiedliche Werte speichern . Ähnlich wie private
Eigenschaften einer Klasse, sage
ich den privaten String-Namen,
ich denke, ein privater
boolescher Wert, Workday. Und dann kann
ich innerhalb des Konstruktors diese
beiden Eigenschaften benötigen. Also String-Name,
Boolean, Workday. Dann kann ich sagen, dass dieser Name gleich Name ist und dieser
Punkt-Arbeitstag entspricht Arbeitstag. Jetzt bekommen wir einige Fehler
bei jedem unserer Werte. Und das liegt daran, dass es
standardmäßig
einen Konstruktor ohne
integrierte Argumente aufruft . Aber wenn
ich den Mauszeiger darüber fahre, wird
es natürlich eine
Zeichenfolge und einen booleschen Wert erwarten. Hier. Ich kann am Sonntag vergehen und dann kann ich falsch
sagen, da es ein Arbeitstag ist. Ich werde das
Gleiche für all diese tun. Also zum Beispiel Montag und wahr, wie ich sage Dienstag und wahr, Mittwoch und ein wahrer. Ich kann dann am Donnerstag vergehen. Und stimmt. Hier haben wir einen Freitag und wahr, und dann schließlich
Samstag und falsch. Jetzt haben wir keine Fehler mehr,
wenn wir nicht versuchen,
einen davon in
unserer eigentlichen Datei hier zu verwenden . anstelle von Tagen pro Woche
den Theta-Punktnamen Kann ich anstelle von Tagen pro Woche
den Theta-Punktnamen auf die tatsächlichen
Werte wie Wochentag zugreifen? Und das können wir nicht, wir müssen
tatsächlich
unsere eigenen öffentlichen Getter
machen , um das zu tun. Hier kann ich public sagen,
string getName. Ich kann jetzt den Namen zurückgeben. Dann kann ich sagen, dass public
boolean Workday ist, und ich kann jetzt den Arbeitstag zurückgeben. Getname ist kein wirklich
guter Name für die Methode. Der Grund dafür ist, dass dies leicht mit dem Namen verwechselt
werden kann . Zum Beispiel haben wir
name und getName. Es ist sehr unklar,
welches wir wollen werden. Eine Sache, die wir tun können,
ist, dass wir
dies umbenennen können , um den Anzeigenamen zu erhalten. Jetzt wird ein Anzeigename
als etwas angezeigt, das normalerweise Benutzern angezeigt
wird. Also etwas mit einem
Großbuchstaben F und Kleinbuchstaben, alles andere wäre ein besserer Anzeigename, dass
alles ein Großbuchstaben ist, alles ist ein Großbuchstaben, es sieht für den Benutzer seltsam aus. Und so ein Kapital F mit
allem Kleinbuchstaben, so würde
man das sagen. Normalerweise wäre dies
ein richtiger Anzeigename. anstelle von GetName zurückgehe, kann
ich jetzt den Anzeigenamen für Kinder sagen. Dann
sage ich hier natürlich , dass Friday Dot Arbeitstag ist. Ich glaube, mach weiter und führe das durch. Wir sollten sowohl den Anzeigenamen
als auch sehen , ob es sich um einen Arbeitstag handelt
, der in diesem Fall S Freitag
hat und wahr ist. Jetzt können Sie
Enums tatsächlich als Variablentypen verwenden. Zum Beispiel kann ich
sagen Wochentage, Tag entspricht Wochentagen, Montag. Ich kann dann sagen, wenn
Tag Arbeitstag ist, kann
ich heute ausdrucken, um zur Arbeit zu
gehen. Ansonsten kann ich
ausdrucken, es ist ein Wochenende. Wenn ich das jetzt mache,
werden wir
heute zur Arbeit gehen , weil wir auf den Wert Day zugegriffen haben
, der Montag entspricht. Aber wenn
ich das auf
Samstag ändere und das mache, sehen
wir jetzt, dass es ein Wochenende ist. Jetzt gibt es nur noch
eine Sache, die ich dir mit Enums zeigen
wollte, und das ist die Fähigkeit, sie alle zu
durchlaufen, wie ich schon sagte, vier
Wochentage, Tag. Hier kann ich in Tagen pro
Woche Punktwerte übergeben. Wenn ich den Mauszeiger darüber fahre, sehen
wir, dass dies eine Reihe von Tagen pro Woche
zurückgibt. Dies wird ein Array
jedes einzelnen Wertes als eigenes Element sein. Hier kann ich den Tagespunkt
ausdrucken, uns beim Namen
holen, dann einen Doppelpunkt. Dann kann ich am
Tag ist Workday hinzufügen. Wenn ich das mache, wird es jeden Tag
durchlaufen. Es wird sowohl
ihren Namen
als auch einen booleschen Wert drucken, wenn es sich um einen Arbeitstag handelt oder nicht. Offensichtlich erhalten
wir bei einer Enums keine externen Eingaben von anderen Teilen des Programms. Alles mit einer
Enum oder selbst eingeschlossen,
was bedeutet, dass die Argumente, die
an den Konstruktor übergeben werden, oder nur statische Werte, die eigentlich
keine Variablen sind. Wie Sie sehen können, übergebe ich ihm
nur eine Zeichenfolge und eine Übergabe
eines booleschen Wertes. Ich gebe
keine Variablen weiter. Enums sind nützlich, wenn Sie
so etwas wie
die Wochentage haben , an denen sie
konkret sind und sich
niemals ändern werden. Nicht einmal die Variablen,
die den Konstruktor übergeben ,
werden sich nicht ändern. Dies ist sehr nützlich,
wenn Sie jemals
Dinge haben , die sehr
konkret sind, denn dann können Sie
leicht darauf zugreifen und bestimmte Werte
referenzieren , ohne sich Gedanken darüber machen zu müssen, dass sie
sich ständig ändern.
41. Versuche endlich mal wieder: In einem früheren Video, als wir Scanner verwenden, haben wir gesehen, wie ein Fehler aussieht. Lasst uns weitermachen und das
neu erstellen. Ich kann einen Scanner erstellen. Ich nenne es Input und ich sinus ist gleich dem Wert
des neuen Scanners. Hier kann ich System.in passieren. Das sollte
dir alles von früher im Kurs
ziemlich vertraut sein . Jetzt drucke ich
einfach den
Eingabepunkt nächstes int aus . Und wenn ich das ausführe, wird erwartet, dass ich
eine ganze Zahl eingebe. Wenn ich zum Beispiel fünf eingebe, funktioniert
alles gut
und der Prozess wurde
mit einem erfolgreichen
Exit-Code abgeschlossen , der 0 ist. Aber wenn ich das noch einmal ausführe und eine Zeichenfolge wie Test
eingebe, erhalten
wir jetzt eine Ausnahme. Dies ist im Grunde nur ein Fehler. Und auf den ersten Blick
mag das sehr verwirrend aussehen, aber es ist eigentlich sehr einfach. Grundsätzlich haben wir
eine Ausnahme
im Thread main
und es wird eine Liste geben, woher alle
Fehler stammen. Dies wird als Stack-Trace bezeichnet. Und das verfolgt
im Grunde genau, woher
der Fehler stammt. Jetzt sind diese alle
tatsächlich anklickbar, und tatsächlich sehen wir den
Namen des Fehlers genau
hier als Ausnahme für die Input-Nichtübereinstimmung. Das passiert, wenn wir
etwas eingeben , das
nicht der richtige Typ ist. Ich kann tatsächlich
auf einen dieser klicken, zum Beispiel Scanner Dot Java. Und das wird die Haut oder die Klasse
öffnen, die eine Menge Sachen enthält, um
die wir uns eigentlich keine Sorgen machen
müssen.
Ich schließe das ab. Wichtiger ist jedoch, dass wir auf unseren eigenen Code klicken
können. Wir können das tatsächlich in Blau
sehen. Wenn ich alle meine Dateien schließe, kann
ich dann genau hier
darauf klicken, öffne
es und setze mich genau in
die gleiche Zeile,
in der der Fehler liegt. Nett, aber wie reparieren wir das
eigentlich? Wir können etwas benutzen, das als Try-Catch
bekannt ist. Ich füge hier
einen Kommentar hinzu. Wir haben Try-Catch und wir
haben auch eine andere Option,
die als endlich
bekannt ist, die Syntax dafür
wäre, geschweifte Klammern zu versuchen, und danach
müssen Sie einen Fang hinzufügen. Dies wird eine Ausnahme
haben. Ich nenne das hier
eine Ausnahme. Und es gibt verschiedene
Arten von Ausnahmen. In der Regel möchten Sie hier keine generische Ausnahme
haben, sondern Sie möchten
den genauen Ausnahmetyp verwenden den genauen Ausnahmetyp , den Sie erwarten. In diesem Fall handelt es sich um eine Ausnahme von
Input-Nichtübereinstimmungen, wie wir dem
Stack-Trace genau hier entnehmen können. Anstatt also nur eine Ausnahme zu
sagen, werde
ich sagen, dass die Ausnahme der Eingabe
nicht übereinstimmt. Jetzt kann ich hier drin sagen
e dot print Stack Trace. Und das wird im Grunde
genau
das Gleiche tun , was wir in unserer
Konsole genau hier sehen. Um dies zu beweisen, kann ich
diese Print-Line-Aussagen machen. Ich kann es in
den Try-Fang stecken. Wenn ich das mache, werden wir genau die gleichen Ergebnisse erzielen. Wenn ich
etwas eingebe, das keine
ganze Zahl ist , zum
Beispiel diese Zeichenfolge. Hier sehen wir den genauen Fehler. Was genau
passiert hier? Nun, im Grunde werden
wir diesen Code genau hier ausprobieren. Wenn etwas nicht funktioniert, wird ein
Fehler ausgelöst. Wenn wir jetzt
keinen Fehler feststellen, stürzt
das Programm standardmäßig ab. Um dies zu beweisen, kann ich
diese Zeile gleich hier zurückbringen. Und ich werde vorerst unseren Try-Fang kommentieren
. Und um dies mit
mehreren Zeilen zu tun, können
Sie einfach alle auswählen und dann den Schrägstrich oder den
Befehls-Schrägstrich auf einem Mac steuern . Jetzt hier drin werde
ich ausgearbeitet ausdrucken. Dies ist, nachdem wir die nächste Int-Eingabe
erhalten haben. Wenn ich das mache, werde ich
nach einer Nummer gefragt. Ich werde fünf betreten
und es hat funktioniert. Aber wenn ich das noch einmal durchführe
und in den Test eingetreten bin, wird
es nicht sagen, dass es funktioniert hat. Das liegt daran, dass das
Programm tatsächlich abgestürzt ist. Und so wird alles, was
daran hinausgeht, keine Rampe sein. Dies ist der Hauptgrund, warum
Sie Try-Catch verwenden möchten. Denn wenn ich danach
ausdrucke und
das Programm hier ausführe, kann
ich in den Test einsteigen. Und es wird immer noch
den Fehler auslösen, weil wir ihn aufgrund der Zeile 14
drucken, bearbeiten, Stack-Trace drucken. Aber es wird das Programm nicht zum
Absturz bringen. Und das sehen wir,
weil wir das
Ausdrucken direkt danach funktioniert haben. Wann immer Sie Code haben, eine Ausnahme auslösen
könnte, wollten
Sie
sicherstellen, dass Sie
diese Ausnahme abfangen und sie dann entsprechend
behandeln. In einigen Fällen
könnte dies ausgedruckt werden. Sie haben keine Zahl eingegeben und wir
müssen nicht unbedingt einen Stack-Trace ausdrucken. Also werde ich das entfernen. Wenn ich das jetzt renne und in den Darm
komme, werden
wir den Fehler nicht sehen. Stattdessen werden wir es einfach
sehen. Sie haben keine Zahl eingegeben. Jetzt habe ich
das endlich erwähnt. Was genau ist das? Nun,
das kommt immer danach. Versuch es zu fangen. Hier kann ich hinzufügen. Und schließlich
ist dies etwas, das ausgeführt
wird, egal was passiert. Versuchen Sie also, dass wir eine
Zeile nach dem anderen laufen. Es wird also diese Linie und
diese Linie und diese Linie laufen. Wenn es jemals eine Ausnahme gibt, wird
es sofort
aufhören, diesen Code hier auszuführen. Und es wird sofort
zur Catch-Anweisung springen und
im Grunde alles laufen, was sich in diesen
geschweiften Klammern befindet. Und natürlich wird
dieser hervorgehobene Code hier nur ausgeführt, wenn
es eine Ausnahme gibt. Wenn alles innerhalb
des Try-Blocks genau hier gut funktioniert, wird der Catch-Code niemals ausgeführt. Aber schließlich geht es
durchlaufen, egal was passiert, egal ob alles einwandfrei
funktioniert hat oder ob es eine Ausnahme gibt, kann
ich ausdrucken. Endlich rannte. Und ich werde
das hier drin führen. Ich kann eine Zahl eingeben, sagen
wir zehn. Und hier sehen wir, dass es
endlich gelaufen ist. Wenn ich das noch einmal ausführe, kann
ich eine Zeichenfolge eingeben. Wir sehen, du hast keine Zahl
eingegeben, aber wir sehen immer noch endlich RAN. Dies ist in vielen Anwendungsfällen nützlich,
aber
ein sehr spezifischer liegt außerhalb
des Geltungsbereichs dieses gesamten Kurses. Das ist im Grunde genommen, wenn es
um Datenbankverbindungen geht. Im Wesentlichen würden
wir mit
unserer try-Anweisung versuchen, eine Verbindung
zur Datenbank herzustellen. Innerhalb eines Fangs würden wir alle Fehler
behandeln und beispielsweise ungültige
Anmeldedaten sind. Und dann wird endlich alle offenen Verbindungen
schließen. In einigen Anwendungsfällen
werden Sie Verbindungen wie diese sehen,
und dies ist ein gutes Beispiel Theorie des Windes, das
endlich verwendet werden kann.
42. Fehler werfen: Im letzten Video
haben wir uns angeschaut, wie man mit verschiedenen Fehlern umgeht. Aber was auch immer wir wollen, um unsere eigenen Fehler zu
erzeugen. Zum Beispiel werde ich
all dies löschen und
diesen Kommentar hier ändern, um einen Fehler
auszulösen. Und so nennen
wir es
immer dann, wenn wir unseren eigenen Fehler
erstellen möchten. Zum Beispiel
kann ich hier eine Zeichenfolge sagen. nächste Zeichenfolge entspricht dem
Eingabepunkt in der nächsten Zeile. Jetzt
werde ich sagen, wenn nächste String-Punkt gleich dem Fallfehler
ignoriert wird, wollte
ich meinen eigenen Fehler nicht
auslösen. Um dies zu tun, kann ich sagen,
neue Ausnahme werfen und ich
kann eine Zeichenfolge übergeben. Und dies wird die Nachricht sein , die auf die Konsole gedruckt wird. Zum Beispiel wurde vom Benutzer ein
Fehler ausgegeben da
der Benutzer
die Zeichenfolge genau hier als Fehler eingibt . Aber wir bekommen gerade einen Fehler. Die Lösung besteht darin,
die Ausnahme zur Signatur der
Methode hinzuzufügen . Wenn ich darauf klicke, sagt
unsere Hauptmethode jetzt, dass es eine Ausnahme auslöst. Dies wird Java im Grunde sagen,
dass
wir innerhalb dieser Funktion unsere eigene Ausnahme auslösen werden. Jetzt, außerhalb
unserer if-Anweisung, kann
ich
die nächste Zeichenfolge
vom Benutzer ausdrucken . Ich fahre
weiter und führe das durch. Und hier gehe
ich in HelloWorld ein und es sollte Hello World ausdrucken und alles funktioniert
wie erwartet. Aber wenn ich das noch einmal ausführe, kann
ich den Fehler nicht ausdrucken. Und dies wird dann
diese wenn Aussage wahr machen. Wenn ich also die Eingabetaste drücke, erhalten
wir jetzt unsere eigene Ausnahme. Hier haben wir die Saite. Es besagt, dass ein Fehler vom Benutzer
ausgegeben wurde, und wir können darauf klicken, um zu sehen, wo die
Ausnahme ausgelöst wurde. Jetzt fragst du dich vielleicht,
warum sollten wir das jemals tun wollen? Warum sagen Sie dem Benutzer nicht einfach, dass er den String-Fehler
nicht eingeben soll? Nun, ein Grund, warum Sie dies tun
möchten, ist dass Programmierer, die Ihren Code oder
sich selbst mit anderen Teilen
Ihres Projekts
verwenden , dann
gezwungen sind , bestimmte Fehler zu erkennen
und korrekt zu interagieren. Wenn Sie beispielsweise Ihr eigenes Programm
erstellen, das andere Entwickler
herunterladen und importieren. Sie können dann
verschiedene Fehler ,
damit Entwickler dann
gezwungen sind , sie zu fangen und
damit umzugehen , je nachdem,
wie sie möchten. Abhängig von der
Art des Fehlers handelt es sich um. Das gleiche Konzept gilt
für Ihre eigenen Projekte. Sie können bestimmte Fehler wenn bestimmte
Dinge passieren. In anderen Teilen Ihres Programms können
Sie das Try-Catch-System
verwenden um dieses Problem tatsächlich zu
lösen.
43. Listen und Array: Neu am Beginn des Kurses mussten
wir uns Arrays ansehen, aber jetzt werden wir uns Listen und ArrayLists
ansehen. Dies werden im Grunde
fortgeschrittenere Methoden zur Verwendung
von Arrays sein . Und in vielen Situationen
, die benutzerfreundlicher
und leistungsfähiger sein werden . Nehmen wir an, ich möchte ein Array von Ganzzahlen
haben, wie ich sage, dass int numbers
gleich Klammern sind. Und hier kann ich meine
Zahlenliste hinzufügen , zum Beispiel 123. Nehmen wir an, ich möchte weitermachen und ein viertes Element hinzufügen. Nun, wenn ich sage, dass Zahlen
Index drei gleich vier sind, werden
wir
jetzt einen Fehler haben. Wenn ich den Mauszeiger darüber fahre, heißt es
Array-Index außerhalb der Grenzen. Im Grunde bedeutet das, dass bei jedem Array keine neuen
Dinge hinzugefügt werden können. Sie müssten ein
völlig anderes Array erstellen. Zum Beispiel könnte ich
sagen, dass Zahlen
einem neuen Integer-Array mit 1234
entsprechen . Und das wird funktionieren. Aber offensichtlich
möchte ich das nicht tun müssen. Ich möchte die Möglichkeit haben, diesem Array
einfach etwas hinzuzufügen. Standardmäßig verfügen Arrays jedoch
nicht über diese Funktionalität. Deshalb haben wir Array-Listen. Dies sind viel einfachere Möglichkeiten, Arrays zu verwenden, bei denen wir Dinge
leicht entfernen, Dinge
hinzufügen, natürlich auf Dinge
zugreifen können Dinge
hinzufügen, natürlich , die
dem vorhandenen Löschen ähneln. Ich gehe weiter und
kommentiere diese Zeile hier draußen. Und ich werde
eine neue ArrayList erstellen. Jetzt besteht der erste Schritt darin, eine generische Liste zu
erstellen. Das wird von Java util
sein. Dies wird eine Schnittstelle
sein, wie wir auf dem
grünen Icon hier sehen können. Jetzt
müssen wir hier weitergeben,
welche Art von Daten wir in einem Geschäft
betrachten und wir können kein int übergeben da dies
einen primitiven Typ hat, wir
eine bestimmte Klasse übergeben müssen. Innerhalb von Java haben wir
Zugriff auf Integer, die eine Klasse ist. Und dies wird es uns ermöglichen, Ganzzahlen in dieser Liste zu verwenden. Also nenne ich
diese Listennummern. Wir können dies
also einer neuen ArrayList zuweisen. Jetzt haben wir hier nur weniger
als und größer als Zeichen. Und dann
könnten diese Klammern, das Zeichen kleiner als und
größer als, das Zeichen kleiner als und
größer als, den gewünschten
HEPA-Wert enthalten, z. B. eine ganze Zahl. Aber im modernen Java müssen
wir das nicht tun. Es wird im Grunde
nur darauf zugreifen, welche Art von Wert wir von der Ganzzahl benötigen, die
wir genau hier übergeben haben. Was genau ist gerade passiert? Nun, wenn ich den Mauszeiger hier über die Liste fahre, sehen
wir, dass dies eine Schnittstelle
ist, wie wir genau hier sehen, eine
öffentliche Schnittstelle. Und das gibt uns eine Reihe
verschiedener integrierter
Funktionalitäten, die die meisten verschiedenen Listen haben
werden. Nachdem ich das gesagt habe, hätte
ich erwähnen sollen,
dass
ArrayList nicht die einzige Art von Liste ist, sondern am einfachsten zu verstehen und am
einfachsten zu demonstrieren ist. Wir werden es
für dieses Tutorial verwenden. Jetzt ist ArrayList eine
eigene Klasse, die
die Listenschnittstelle implementieren
wird. Es wird also
alle Funktionen erhalten , die
die Liste bietet, aber auch darauf aufbauen. Das ist cool und
alles, aber wie verwende ich eigentlich die Zahlenliste? Nun, hier kann ich Zahlen Punkt
sagen. Die erste Option besteht überhaupt darin, dass wir eine
andere Sammlung,
z. B. eine andere Liste, übergeben und alle Elemente
hinzufügen können. Oder wir können einzelne
Elemente wie eine Ganzzahl hinzufügen. Zum Beispiel eins. Wenn ich nun hier Zahlen Punkt hätte, können
wir ein bestimmtes Element
in einen bestimmten Index einfügen. Wir können die Liste auch löschen. Wir können sehen, ob es leer ist, Es gibt eine Reihe anderer Optionen wie das Entfernen
bestimmter Elemente, Abrufen der aktuellen Größe oder der Anzahl der
Elemente in der Liste und viele, viele mehr. Lasst uns fortfahren und
alle drei Zahlen, die wir
wollten, zu dieser Liste hinzufügen . Zahlen, füge keine zwei
Zahlen hinzu, Punkt addiere drei. Jetzt sind die Zahlen
ArrayList dem Zahlen-Array sehr ähnlich
, das kommentiert wurde. In einem so einfachen
Beispiel spielt es offensichtlich keine Rolle. Aber wenn wir wirklich zehn oder 100 Zahlen hinzufügen wollen , können
wir
diese Zahlen leicht durchlaufen und sie dann in die
Add-Funktion hier
übergeben. Oder wenn wir wollten, können
wir hier ein Array in
den neuen
Array-Listen-Konstruktor übergeben . Jetzt können wir nicht einfach ein generisches Array übergeben
. Wir müssen Arrays mit
einem Kapital einen Punkt als Liste sagen. Jetzt werden
wir hier drin
einen Varargs mit einer beliebigen Anzahl von
Ganzzahlen haben . Also kann ich 123 sagen. Wenn ich
das jetzt lösche,
werden wir immer noch das
gleiche exakte Ergebnis haben. Wenn Sie also ein
vorhandenes Array haben, können
Sie es leicht weitergeben,
ähnlich wie bei einer solchen Syntax. Aber normalerweise wirst du das
nicht tun. Die meiste Zeit. Sie
erstellen einfach eine ArrayList und fügen dann
nach Bedarf Dinge hinzu. Also lasst uns weitermachen und alles hier
ausdrucken. Ich kann Zahlen ausdrucken. Und wenn ich das durchführe, sehen
wir jetzt 123. Versuchen wir, einige Elemente von hier aus zu
bewegen. Ich kann sagen Zahlen entfernen. Hier können wir
ein bestimmtes Objekt
oder eine bestimmte Ganzzahl übergeben . Eine Ganzzahl wird dieses bestimmte Element nicht
entfernen. Dies wird
den Index tatsächlich entfernen. Ich verschiebe irgendwie Index eins, was der Wert zwei
sein wird. Ich führe das aus, wir sehen jetzt nur 13 in unserem Array, wie
wir es hier tun. Aber was passiert, wenn ich
die Nummer zwei einfach entfernen möchte ? Nun, wie ich schon sagte, ganzzahliger
Wert von und geht in. Wenn ich das jetzt mache, werden
wir
13 sehen , wie wir es hier tun. Jetzt mag das
etwas seltsam erscheinen. Warum
müssen wir das eigentlich tun? Nun, wenn ich sage, Numbers
dot remove hier, sehen
wir, dass dies
eine überladene Methode ist. Wir können einen
Index oder einen Kondensator übergeben, ein Objekt, um nur die Zahl
zwei oder die Nummer eins oder eine
beliebige Art von grundlegender Ganzzahl zu übergeben . Es wird das
als primitive Art von int behandeln. Es wird hier ein
Themenbeispiel verwendet. Aber wenn wir
eine bestimmte Klasse
oder ein Objekt übergeben , das etwas
repräsentiert, wird es die
zweite Option genau hier verwenden. Genau das machen wir mit dieser
Codezeile genau hier. Dies wird
ein Objekt übergeben und nicht nur
eine primitive Ganzzahl. Es wird dann die
ArrayList durchlaufen und versuchen, alle Elemente zu entfernen,
die diesem Wert
entsprechen, was in diesem Fall, wie wir sehen, die Nummer zwei nicht
sehen. Lasst uns nun herausdrucken, wie viele Elemente es im Surrealistischen
gibt. Also könnte ich Zahlen sagen Punktgröße. Wenn ich das hier durchführe, sehen
wir zwei in der Konsole. Und das können wir auch klären. Also lasst uns weitermachen
und Zahlen sagen. Punkt klar. Wenn ich das jetzt mache,
wird es das tatsächlich löschen nachdem wir die beiden
Zahlen ausgedruckt haben, wie wir es hier sehen. Aber unsere Größe liegt jetzt bei 0, weil wir die ArrayList tatsächlich
gelöscht haben. Jetzt ist ein ArrayList und
Listengeneral als Sammlung bekannt. Es ist im Grunde eine benutzerdefinierte
Klasse, die es uns
ermöglicht , bestimmte Dinge hinzuzufügen
und bestimmte Dinge zu entfernen. Und es gibt eine Reihe
verschiedener Beispiele dafür. In diesem Video und
im nächsten Video
werden wir zwei Beispiele durchgehen. Aber ehrlich gesagt,
jedes Beispiel zu behandeln, würde eigenen
Kurs nur in diesem Fall
rechtfertigen. Wir werden uns also nur
an einige der
einfacheren, am häufigsten verwendeten Sammlungen
wie ArrayList und HashMaps halten einfacheren, am häufigsten verwendeten Sammlungen , die wir uns
im nächsten Video ansehen werden.
44. Karten und Hash: Wir werfen jetzt
einen Blick auf HashMaps, die eine Möglichkeit sind, etwas zu
speichern, das
als Schlüssel-Wert-Paar bekannt ist . Grundsätzlich bedeutet, dass es
für jeden einzelnen Schlüssel einen entsprechenden Wert
gibt. Werfen wir einen
Blick auf einige Beispiele. Hier. Ich werde eine
Map haben, und dies muss einen Schlüssel und einen Wert speichern
, der zwei verschiedene
Arten von Variablen sein kann. Zum Beispiel kann der Schlüssel
eine Zeichenfolge sein und der Wert
kann eine Ganzzahl sein. Ähnlich wie ArrayLists müssen
dies die tatsächlichen Klassentypen
sein. Also können wir hier nicht int sagen. Wir müssten eine
ganze Zahl mit einem Kapital I
angeben. Hier kann ich
verschiedene Arten von Scores hinzufügen. Und ich werde eine
gleiche einer neuen HashMap zuweisen. Ähnlich wie bei einer ArrayList können
wir eine Zeichenfolge und eine
Ganzzahl hinzufügen, wenn wir möchten. Aber im modernen Java ist es nicht
notwendig, also werde ich es nicht tun. Was genau ist
ein Schlüssel-Wert-Paar, ein Schlüssel-Wert-Paar bei diesen Ergebnissen
aufgeführt ist, ist
für ein bestimmtes Videospiel. Ich kann „Punkte“ sagen. Und hier können wir sehen, dass wir eine Zeichenfolge
übergeben, was wir von
dieser Zeichenfolge genau hier haben. Und wir geben hier auch eine ganze Zahl von dieser
Ganzzahl aus. Dies ist ein Schlüssel-Wert-Paar. Nehmen wir zum Beispiel an, dass ich 77 Punkte in diesem Spiel
habe. Ich kann sagen, Punkte-Punkt gesetzt. Bob hat PD-Punkte im Spiel
und Punkte Punkte hier gesetzt, Joe hat 30 Punkte im Spiel. Lasst uns weitermachen und
das auf der Konsole ausdrucken. Also kann ich Ergebnisse ausdrucken
und ich kann das ausführen. Und hier sehen wir, dass Alex 77 entspricht, Joe ist 30 und
Bob gleich 80. Aber welche anderen Möglichkeiten
haben wir, wenn es darum geht? Ich kann hier „Punkte“ sagen. Ich kriege eine gewisse Sache. Und das war der Ort, an dem wir die Saite weitergeben
würden. Zum Beispiel kann ich einen Alex passieren. Und ich werde diese
ganze Zeile hier mit
Control X oder Command X auf Mac schneiden . Und dann kann ich das ausdrucken. Ich kann es mit Control
V oder Command V auf einem Mac einfügen. Und wenn ich das mache,
werden wir die Ergebnisse
für die Saite Alex bekommen ,
in diesem Fall sind es 77. Wenn ich Punkte sage, könnten
wir es dann
ähnlich wie eine ArrayList löschen. Dadurch werden einfach
alle Einträge entfernt. Wir können einen
Eintragssatz oder einen Schlüsselsatz bekommen. Wir können auch die Werte
ermitteln und schauen uns gleich an, was diese drei Dinge hier
machen. Wir können sehen, ob es leer ist. Wir können bestimmte Dinge ersetzen. Wir können die Größe bekommen. Hier können wir die Werte
erhalten. Wir können auch sehen, ob
es einen Schlüssel enthält, schrecklich einen Wert erreicht. Und es gibt eine Reihe
anderer Optionen, z. B. sie zu entfernen. Die meisten davon sind
selbsterklärend, andere müssen Sie möglicherweise mit der Dokumentation
experimentieren oder
nachschlagen. Lassen Sie uns weitermachen und
versuchen, alle Schlüssel oder alle
Werte oder beides zu durchlaufen . Ich werde
diese Print-Statements hier los. Ich sage für String Key. Und dann werden
wir hier eine for-each-Schleife benutzen. Also haben wir unseren Doppelpunkt hier. Ich kann jetzt sagen
Punktschlüsselsatz. Und dies gibt ein
Set zurück, das
im Konzept einer Liste ähnelt , die
wir im letzten Video gesehen haben. Jetzt hier drin kann ich
einfach den Schlüssel ausdrucken. Wenn ich das mache,
wird es Alex,
Bob und Joe drucken , wie
wir genau hier sehen. Aber was passiert jetzt,
wenn wir Zugang zu den Werten
erhalten wollten ? Ich kann sagen Punkte Punkt v, und hier haben wir Werte. Jetzt müssten wir das in einen int
ändern, ich schätze ich int value. Und dann kann ich den Wert ausdrucken. Wenn ich das ausführe,
können wir jetzt alle
drei Werte
aus dieser exakten Map sehen . Aber was ist, wenn ich
Zugang zu beiden erhalten wollte? Nun, ich kann sagen, dass
wir für den
Eintritt mit einem Kapital E das
von Java util Map verwenden werden. Hier müssen wir angeben, welche
Arten von Variablen wir benötigen. In diesem Fall eine
Zeichenfolge und eine Ganzzahl. Ich nenne
diesen variablen Eintrag. Dann kann ich mit einem Doppelpunkt jetzt Punktepunkt-EntrySet
sagen. Wenn ich jetzt den Mauszeiger über Eintragssätze fahre, wird
dies
einen Satz eines Eintrags
zurückgeben , der ein K und V hat, was für Schlüssel und Wert steht. Im Wesentlichen
kann ich sagen, dass der
Einstiegspunkt fgetc key oder Entry Dot
einen Wert erhält, um Zugriff darauf zu erhalten. Zum Beispiel ist der
String-Schlüssel gleich Eintrag, Talk KCI und dann int value
entspricht dem Wert des Eintrags Dot get value. Ich kann dann den Schlüssel ausdrucken
, der den Benutzernamen
hat, Pluswertpunkte hat. Wenn ich das jetzt durchführe, wird
es herausgeben, was jeder Benutzer hat und welche entsprechenden
Punkte wir genau hier sehen.
45. Erstellen einer Jar: Wir sind dabei, uns dem
endgültigen Projekt für den Kurs zu nähern, der das Spiel Battleship in Java neu gestalten wird . Bevor wir das tun, müssen
wir jedoch sicherstellen, dass wir verstehen wie wir
unseren Java-Code tatsächlich in
eine ausführbare Datei umwandeln können. Möglicherweise sind Sie mit
Dot-EXE-Dateien vertraut , in denen Sie
darauf doppelklicken können , und
es öffnet ein Programm. In Java haben wir
eine Dot-Jar-Dateien, die Sie wahrscheinlich schon einmal gesehen
haben. Wie konvertieren wir unseren
gesamten Quellcode genau in eine Dot-JAR-Datei, die
wir tatsächlich ausführen können. Nun, der erste Schritt besteht
darin, oben rechts auf das Zahnrad zu klicken und dann zur Projektstruktur zu
wechseln. Oder Sie können diese verwirrende
Abkürzung genau hier verwenden. Sobald Sie hier sind, möchten
Sie nach links gehen und auf Artefakte klicken und dann auf
den Pluszeiger über
Jar klicken und dann von
Modulen mit Abhängigkeiten aufrufen. Von dort aus müssen wir eine Hauptklasse
angeben. Dies ist im Grunde die Klasse
, in der unsere Hauptfunktion ist. Wenn ich auf einen geöffneten Ordner
klicke, werden automatisch
alle verschiedenen Dateien ausgewählt,
die eine Hauptfunktion
enthalten. Wir haben also nur einen. Wir können einfach auf Okay klicken und dann erneut auf Okay klicken. Jetzt
kann ich von hier aus auf Okay klicken. Dann klicke ich auf
Build, Build Artefakte. Und von hier aus
können wir einfach die
Eingabetaste drücken oder Sie können
auch auf Build klicken. Wir sehen, dass es
etwas in der Nähe des Bodens baut. Und jetzt, das ist erledigt, können
wir unser
OUT-Verzeichnis erweitern, in Artefakte gehen. Und hier sehen wir unser
Workspace Dot Jar. Ich
klicke mit der rechten Maustaste darauf. Ich könnte dann auf
Pfadschrägstrich kopieren klicken. Und dann klicke ich
von hier aus auf den absoluten Pfad. Wenn ich das einfüge, wird
dies
ein Dateipfad zu dieser
exakten JAR-Datei sein . Um dies zu tun, können wir es nicht
einfach öffnen. Wir müssen
es tatsächlich durch ein Terminal laufen lassen. Der Grund dafür, wenn
es sich um eine Konsolenanwendung
handelt,
was bedeutet, dass wir in
unserer Konsole arbeiten , wie wir es während des
gesamten Programms
gesehen haben . Daher haben wir kein benutzerdefiniertes Fenster mit
Schaltflächen und Bildern
und all dem Zeug, das
außerhalb
des Geltungsbereichs dieses Kurses liegt . Davon haben wir in
diesem Kurs nichts behandelt. Wie genau führen wir das aus? Wir müssen
unser eigenes Terminal eröffnen. Wenn Sie unter Windows sind, können Sie eine
Suche oder einen Befehl durchführen
und dann die Eingabetaste drücken. Wenn Sie jetzt auf einem Mac sind,
weil ich keinen Mac besitze, bin
ich mir nicht sicher, wie das geht, aber Sie können einfach
googeln, wie Sie das
Terminal auf dem Mac öffnen und es sollte eine Reihe von Ergebnissen
haben. Also helfe ich dir raus. Sobald Sie Ihre Eingabeaufforderung oder
Ihr Terminal geöffnet haben,
können Sie in jedem Eingabeaufforderung oder
Ihr Terminal geöffnet haben, Fall Java-Space,
Dash Jar-Speicherplatz eingeben und dann in Ihren Pfad einfügen. Aber seien Sie sich bewusst, wenn Sie
Leerzeichen auf Ihrem Weg haben, müssen
Sie schnell
alles und doppelte Anführungszeichen machen. Ich füge hier doppelte Codes hinzu. Und dann kann ich mit der rechten Maustaste klicken
, um den Pfad einzufügen. Hier sehen wir, dass der
Warnock-Key-Ordner Leerzeichen enthält. Also muss ich auf beiden Seiten
doppelte Anführungszeichen hinzufügen. Wenn ich die Eingabetaste drücke, sehen wir, dass tatsächlich
nichts passiert. Das liegt daran, dass unser Code eigentlich
nichts bewirkt. Lasst uns weitermachen und den Text
ausdrucken, Hello World. Und dann gehe ich
zu Build,
baue Artefakte und drücke die Eingabetaste. Hier sehen wir, dass es sich noch einmal
baut. zum Terminal zurückgehe, kann
ich den Pfeil nach oben drücken, um zum vorherigen Befehl zu
wechseln. Wenn ich die Eingabetaste drücke, heißt es
jetzt helloworld. Der eigentliche Code wird jetzt
durch diese JAR-Datei ausgeführt.
46. Einführung in das Schlachtschiff: Wir werden jetzt
in das letzte Projekt für den Kurs eintauchen ,
der ein
Einzelspieler-Schlachtschiff-Spiel
machen wird . Hier sehen wir dieses Board und wir haben fünf verschiedene
Arten von Schiffen, alle zufällig um das Board herum
positioniert sind. Wir können dann eine
Koordinate eingeben, zum Beispiel eine 0, die tatsächlich leer ist,
wie wir hier sehen können. Und es wird dann „Miss“ sagen. Aber ich kann hier für diese
Koordinate H auswählen. Und es wird dann „Hit“ sagen. Und das wird jetzt
durch ein x ersetzt. Wenn ich es tue, dann
wird j 0 dann sagen, benutze ihr Schlachtschiff sank und das ganze Schiff
hier ist sinken. Im Gegensatz zu früheren Videos in
dem Kurs, in dem wir Code
geschrieben haben, werden
wir
während dieses Projekts gemeinsam an
den Plänen für jedes
einzelne Feature arbeiten . Und dann wollte ich versuchen , diese Funktion selbst zu
erstellen. Sobald Sie diese Funktion
abgeschlossen haben
oder wenn Sie das Gefühl haben, so viel
wie
möglich getan zu haben, und
benötigen immer noch zusätzliche Hilfe. Sie könnten dann zum
nächsten Abschnitt des
Videos gehen , in dem wir es tatsächlich zusammen erstellen
werden. Ich empfehle Ihnen jedoch dringend, jeden einzelnen Teil
dieses Projekts allein
auszuprobieren , bevor sich das
Schritt-für-Schritt-Tutorial ansehen. So arbeiten aktuelle
Softwareentwickler. Es ist also eine großartige Angewohnheit
, sich auf diese Weise zu begeben. Sie können
mithilfe der Programmierung eine Fähigkeit
zur Problemlösung aufbauen .
47. Dateien und Koordinaten: Um das Projekt zu starten, würde
ich alle Dateien löschen, die Sie in Ihrem Projekt
haben,
als sicheres Zuhause.
Die Datei, die
Ihre Hauptfunktion hat in der
ich war, erstellt hier diese
fünf verschiedenen Dateien. Und bedenken Sie die Akte des
Schlachtschiffs Maine. Dies enthält meine
Hauptfunktion genau hier. Jetzt gibt es viele
Teile in diesem Projekt, die aufeinander
angewiesen sind. Wenn ich zum Beispiel den Mauszeiger
über meine Hauptfunktion fahre, erstelle
ich ein Spielerobjekt und erstelle ein Board-Objekt. Um
die Dinge Schritt für Schritt zu machen, wollen
wir mit dem
kleinstmöglichen Stück beginnen , das von nichts anderem
abhängen wird. Und es wird auch
genutzt werden und verschiedene andere Orte in diesem Projekt werden
hier eine Koordinate sein. Jetzt habe ich erwähnt, dass du alles
selbst schreiben
solltest , bevor du
tatsächlich mitmachst. Aber diese Datei ist sehr einfach. Also werde ich
diese Akte einfach schnell mit dir überfahren . Und in zukünftigen Videos
mit diesem Projekt möchten
Sie
die Dinge selbst ausprobieren, bevor Sie Schritt für Schritt meinen
eigenen Erklärungen
folgen. Hier haben wir eine Akkordklasse
, die für Koordinate steht. Dies wird einen X- und
Y-Wert auf der Platine selbst
darstellen . Es wird auch
eine boolesche Eigenschaft haben, die darstellt,
ob diese getroffen wurde. Das heißt also, wenn ein Schiff
da ist und wir diese Koordinate tatsächlich
erraten haben. Wenn wir jetzt
eine Koordinate erstellen, geben
wir einfach x und y durch den Konstruktor und
weisen sie hier den
lokalen Variablen zu. Wir haben dann einen Getter
und Setter für alle drei privaten Immobilien, das x, das y und
das ist Boolean getroffen. Im Wesentlichen sind wir in der Lage, das x
zu erhalten, das y, C Wenn diese Koordinate getroffen wird, sowie diese
einzelnen Werte. Jetzt haben wir hier eine
ToString-Funktion. Immer wenn wir ein
Objekt auf die Konsole drucken, wird die
ToString-Funktion tatsächlich
hinter den Kulissen ausgeführt . Wenn wir also eine Koordinate ausdrucken würden
, wird
sie im Wesentlichen x Komma
ausdrucken. Nun, nur zur Klärung, falls Sie nicht wissen,
was ein Viertel ist. Jede einzelne Zelle
wird hier ihre
eigene Koordinate sein. Zum Beispiel ist dies 0, das ist eins und so weiter. Irgendwann werden wir hier ein eigenes Board
erstellen. Wir
sind verschiedene Schiffe werden nach dem Zufallsprinzip platziert und die Plattenspalten werden von den
Buchstaben a bis J dargestellt.
Und die Plattenreihen
werden von den Zahlen 0 bis neun dargestellt. Jetzt
wird dieser X- und Y-Wert darstellen, wo sie von den Spalten und Zeilen
abhängen. Und der Hüftwert
wird darstellen, ob dies ein tatsächlicher Treffer war. Deshalb haben wir
erraten, wo ein Schiff ist. Hier haben wir zum Beispiel einen C5
für diese Zelle genau hier. Wenn ich C5 sage, dann gehe
ich zu einem x. Daher ändert sich diese
Koordinate und mein Programm auf true.
48. Schiffe: Lasst uns jetzt
unser eigenes Schiff erstellen. Und bevor Sie selbst
einen Code schreiben, schlage
ich dringend vor, dass wir uns
den Plan für
diese Klasse und genau die
Tipps ansehen , die ich hier gegeben habe. Was genau ist ein Schiff? Nun, offensichtlich wird
dies innerhalb unseres
Programms hier, wenn ich es öffne, ein echtes Schiff darstellen, auf dem
wir hier vier verschiedene
Koordinaten haben. Und die Situation haben wir
fünf verschiedene Koordinaten. Dieses ist ein kleineres Schiff, war
insgesamt nur zwei davon, fünf verschiedene Chips. Wenn wir uns diese Klasse ansehen, sehen wir als erstes eine private Liste , die eine Reihe
verschiedener Koordinaten enthält. Natürlich ist dies die Klasse, die wir im letzten Video geschrieben haben. Wie wir genau hier sehen, benötigt
jedes Schiff eine
eigene Koordinatenliste, damit wir genau wissen,
wo es ist. Jetzt sehen wir auch alle möglichen
Schiffsgrößen genau hier. Und denken Sie daran, dass
jeder Kommentar, den ich hinzufüge wie diesen hier, dieser Kommentarblock
hier soll
Ihnen so weit
wie möglich helfen und
einige nützliche Informationen geben von dem, was sich in
diesen Funktionen befindet. Aber hier haben wir eine statische Methode , die ein ganzzahliges Array zurückgibt. Dies wird im Grunde nur
54332 zurückgeben. Und wenn ich zu meinem
Programm gehe und es wieder führe, sehen wir
hier ein Schiff
, das fünf lang ist. Hier sehen wir ein vierlanges Schiff,
aber es ist nur eine Vertikale. Hier sehen wir eine zu lange
Drei und dann noch drei. Wenn ich also ein sechs langes Schiff hinzufügen
würde, führe ich dieses
Programm erneut aus. Wir sehen es jetzt genau hier. Dies wird bestimmen, wie viele verschiedene Schiffe es in den Größen jedes Schiffes
gibt. Denken Sie also
daran, dass ich
standardmäßig vorankomme , ich habe 54332. Als nächstes haben wir
den Konstruktor. Und da dies
nur eine Zeile lang hat, kann
ich die
Funktionalität nicht wirklich vor Ihnen verbergen, aber offensichtlich ist es sehr einfach. Wir erhalten gerade eine Liste
von Koordinaten und weisen diese genau hier der lokalen
Koordinatenliste zu. Dann haben wir auch einen Getter
sowohl für die Koordinaten die Anzahl der
Koordinaten, die wir haben. Grundsätzlich
wird
die Größe des Schiffes erhalten , wie es
mit dem Namen beschrieben wird. Das bedeutet, dass
diese drei hier drei Listen zurückgeben werden , um
zwei zu stürzen und so weiter. Jetzt sind diese wahrscheinlich
selbsterklärend, aber die nächsten paar
sind es vielleicht nicht. Und wieder
ermutige ich Sie dringend,
sich die verschiedenen
Kommentare anzusehen, die ich hinzugefügt habe. Dies ist beispielsweise der GET-Index gibt eine ganze Zahl zurück und es
dauert ein Viertel darin. Und wenn Sie sich richtig erinnern, befindet sich
ein Index, an dem sich ein
bestimmtes Element in
einem Array befindet oder eine Liste bei 0 beginnt. Hier lautet die Beschreibung, dies gibt den Index in
der Koordinatenliste zurück , in
der das Perineumkabel gefunden wurde. Dies ist die
Perimeterkoordinate und wir beziehen uns auf die
Koordinatenliste hier oben. jetzt weiter nach unten scrollen, sehen
wir, dass dies
den Index seines gegenwärtigen oder Ihrer
Rückgabe negativ zurückgibt. Wenn es nicht anwesend ist. Wenn Sie den Index nicht finden können, möchten Sie einen negativen
zurückgeben. Als Nächstes werden wir sehen, ob das bereits verwendet wird. Hier wird überprüft, ob sich eine
Koordinate innerhalb des Schiffes befindet. Hier ist ein Tipp. Verwenden Sie die GET-Indexmethode. Im Wesentlichen sollte der get-Index negativ
zurückgeben,
wenn er nicht
verwendet wird , oder er sollte
etwas anderes zurückgeben, wenn es sich nicht um die USA handelt. Und dann haben wir hier eine
kompliziertere Funktion
, nämlich ob eine bestimmte Koordinate ein Treffer
wäre. Jetzt kommt die Komplexität
dieser Funktion von einem, das ein boolesches Array
zurückgibt. Dieses Array wird zwei verschiedene Werte
enthalten. Der erste wird
ein boolescher Wert sein, wahr oder falsch, wenn es ein Treffer war. In der zweiten
wird es ein boolescher Wert sein, wahr oder falsch, wenn
es das Schiff versenkt hat. Wenn ich zum Beispiel
etwas errate und es ein Fehlschlag ist, werden
wir falsch und falsch haben. Hier sagen wir, dass mes
gleich falsch und falsch ist. Wenn es ein Treffer ist, aber das Schiff
nicht versenkt, wird
es wahr und falsch sein. Wenn es das Schiff nicht versenkt, wird es wahr und wahr
sein. Dies sind die möglichen
Rückgabewerte , wenn es um
die Funktionalität geht. Dies hat alle Funktionen
, die ein Schiff hat. Also mach weiter und pausiere dieses Video und versuche
so viel wie möglich hinzuzufügen, versuche so weit wie möglich zu kommen. Und sobald Sie alles
erledigt haben oder Ihr Bestes versucht haben, brauchen Sie wirklich nur zusätzliche Hilfe. Dann mach weiter und setze
den Rest dieses Videos fort und ich werde meine Lösung
durchgehen, wie ich das Schiff gemacht habe. Okay, also beginnend oben, haben wir
hier einen GET-Index. Dies ist die erste versteckte Methode , die ich noch nicht durchgegangen bin. Lassen Sie uns also überprüfen, was
das zu tun versucht. Hier. Wir haben Koordinatenargumente
und versuchen zu sehen wo genau dies in
unserem Koordinatenarray liegt, das lokal in
seiner Klasse oben rechts gespeichert ist. Im Wesentlichen wird der Index
zurückgegeben oder es wird einen negativen zurückgeben,
wenn er ihn nicht finden kann. Wir beginnen
also damit, dass wir
jede einzelne Koordinate
in unserer Liste durchlaufen . Wir sagen, dass int a gleich 0 ist, während a kleiner als
die Coronet-Listengröße ist, werden
wir einen
ziemlich Standard für die Schleife erhöhen. Hier drin. Wir kriegen unser
Zielquartal darin ein. Und das
ändert sich je nach jeder Iteration der for-Schleife. Während dann einfach
nur
überprüft wird, ob der x-Wert
dem x-Zielwert entspricht und der Y-Wert
einem Ziel-Y-Wert entspricht. Wenn beide zutreffen, bedeutet
das, dass dies genau
dieselbe Koordinate ist. Und wir wollten zum aktuellen Index zurückkehren im Grunde nur eine zurückgeben. Wenn diese Aussage
niemals zutrifft, dann werden wir schließlich aus dieser gesamten Schleife
ausbrechen. Und deshalb
werden wir anfangen, einfach negative zurückzugeben,
was bedeutet, dass wir es nicht finden konnten. Dies wäre die
GET-Indexfunktion. Gehen wir nun zur
End-Use-Funktion über, die im Grunde nur die Indexmethode
verwendet. Hier. Wir erstellen einen
booleschen Aufruf wird verwendet und die Zuweisung gleich Indexübergabe und Koordinaten
sind nicht gleich negativer. Ein so negativer bedeutet
, dass nichts gefunden wurde. Und wenn etwas gefunden wurde, bedeutet das, dass
etwas zwischen 0 und der Gesamtzahl der
Koordinaten zurückgegeben würde. Wenn der Index also nicht negativ
ist, bedeutet
das, dass es sich um Nachrichten handelt. Jetzt können wir diesen Code tatsächlich
vereinfachen. Ich habe es in zwei getrennten Zeilen geschrieben nur damit ich dies minimieren kann, da
Single-Line-Funktionen nicht so
minimiert werden können , wie wir es hier sehen. Wenn ich diese Funktion minimiere, sehen
wir den Code immer noch. also zurückgehe, um diesen Code zu
vereinfachen, kann
ich einfach zurückkehren, Index
erhalten, übergeben und koordinieren ist nicht
gleich dem negativen. Dies wird true
oder false zurückgeben, je nachdem ob diese Koordinate nicht für das Schiff
verwendet wird. Dann haben wir hier die
kompliziertere Funktion , die getroffen wurde. Und wieder gibt dies
ein boolesches Array zurück, bei dem der erste
boolesche Wert
sein wird , wenn es ein Treffer war, und ein zweiter boolescher Wert wird sein, wenn er dieses Schiff denkt. Wenn ich das hier erweitere, erhalten
wir
zuerst den Index von unserer GET-Indexmethode. Und wenn der Index negativ
ist, bedeutet
das, dass dies ein Fehler war. Daher sollte ein Fehler
ein
boolesches Array mit
false und false zurückgeben , wie wir genau hier sehen. Hier sehen wir diesen negativen, der genau
das Negative sein wird , das zurückgegeben wird, wenn wir nichts finden
können. Nun, danach, sobald wir hier
zu diesem Code gekommen sind, wissen
wir, dass wir
tatsächlich etwas getroffen haben. Was er sagt, sehen Sie,
ob wir
dieses Schiff tatsächlich versenkt haben oder ob es
nur ein normaler Treffer ist. Zuerst werden wir die Koordinate bei
diesem bestimmten Index
abrufen und ihren
hippen Wert auf „true“ setzen. Wenn Sie sich an
die Koordinatenklasse erinnern haben
wir diesen booleschen Treffer. Und so
weisen wir das jetzt wahr zu,
weil wir diesen Teil des Schiffes tatsächlich
getroffen haben. Wenn ich jetzt zurück ins Schiff gehe, erstelle
ich
einen Booleschen namens sank und setze diesen Wert auf true. Im Wesentlichen bedeutet
, dass
wir standardmäßig davon ausgehen werden, dass
das Schiff gesunken ist. Und dann
werden wir hier
jede einzelne Koordinate
des Schiffes durchlaufen . Wenn es nicht getroffen wird, dann ist
das, was zu sagen ist, das sank gleich falsch und wir werden aus dieser Schleife
ausbrechen. Im Wesentlichen funktioniert dieser ganze
Code genau hier. Es ist ein Sitz, wenn das Schiff
noch Koordinaten hat , die nicht getroffen werden. Wenn jede einzelne Koordinate
des Schiffes getroffen wird, sinkt das Schiff dann. Dann können wir endlich unser boolesches Array
zurückgeben. An dieser Stelle des
Codes genau hier wissen
wir, dass es einen tatsächlichen Treffer
gab. Der erste Boolesche Wert
ist immer wahr, aber der zweite boolesche Wert
wird wahr oder falsch sein je nachdem er tatsächlich den
Besitz versenkt hat, abhängig von seiner Logik genau hier. Dies wird
die Dead-Hit-Funktion sein. Und dies ist wahrscheinlich
die komplizierteste Funktion in der Schiffsklasse. Aber hoffentlich war all diese
Erklärung für
Sie sinnvoll und hoffentlich haben Sie den größten Teil dieser
Funktionen runtergebracht. Jetzt gibt es bei der
Programmierung natürlich viele, viele verschiedene Möglichkeiten, denselben Codetyp zu schreiben
. Wenn Ihr Code also etwas
Ähnliches
erreicht wie meiner
, und wenn er funktioniert, dann machen Sie sich keine Sorgen, wenn er etwas anders
aussieht, ist
das vollkommen in Ordnung,
solange er immer noch dasselbe
tut.
49. Spieler: Werfen wir einen Blick auf
die Spielerklasse. Dies wird im Grunde
nur
alle Schiffe für
einen bestimmten Spieler abwickeln . Jetzt haben wir in diesem Projekt
nur einen Spieler. Im Grunde genommen kümmern
wir uns nur um
alle Schiffe. Also zeige ich dir ein paar
grundlegende Einrichtungscodes. Aber wenn es um die
eigentliche Funktionalität
geht wie alles funktioniert, ermutige
ich
Sie dringend,
meine Beispiele hier zu verwenden meine Beispiele hier und die
Funktionalität selbst zu schreiben und dann zu kommen
zurück zum Video. Man hat dir
meine eigenen Beispiele gezeigt. Zu Beginn
haben wir hier eine Liste von Schiffen, die Schiffsklasse,
das haben wir im vorherigen Video
gemacht. Wir haben hier auch einen Konstruktor, der die Platinengröße
erhalten wird. Wenn wir zu meiner Hauptdatei gehen, sehen wir
hier, dass wir
einen neuen Spieler erstellen und die Boardgröße
übergeben. Jetzt
können wir auch alle Schiffe zurückgeben, nur ein sehr einfacher Getter. Jetzt, wenn
wir hier vorankommen, haben wir eine Zufallsfunktion. Ziel ist es, je nach
Boardgröße und Bootsgröße
zufällig einen Startpunkt für ein Schiff zuzuweisen. Es sollte auch sicherstellen , dass das Boot tatsächlich auf das Board
passt. Zum Beispiel haben wir hier
dieses fünf lange Boot. Und wenn dieser Ausgangspunkt war, sagen
wir J4, wo hier
tatsächlich endet. Dann gibt es
vier Charaktere, da wird es außerhalb der Tafel sein. können wir nicht haben. Also wollen wir
sicherstellen, dass wir
das Boot tatsächlich auf dem Akron-Board können . Jetzt gibt dies eine Ganzzahl zurück
und die Return-Anweisung gibt die Ausgangsposition in der das Schiff auf das Board
passt. Wenn diese
Ausgangsposition zum Beispiel genau hier wäre, wären
dies sechs, weil
G sechs entspricht Ich zeige hier nur
Buchstaben an, so dass es leicht ist zu unterscheiden,
ob seine Zeilen oder Spalten sind. Aber sagen wir, es
fängt genau hier an. Das wären sechs und
dies würde nicht auf
das gesamte Board passen , da es
sich um ein fünflanges Schiff handelt. Wir haben insgesamt zehn
Spalten und zehn Zeilen. Sechs plus fünf sind gleich 11. Also würden wir um eins losgehen. Stattdessen wird es
fünf zurückgeben. Im Grunde bedeutet,
dass
wir uns auf diese Änderung einstellen werden, um sicherzustellen, dass
das Board auf das Boot passt. Jetzt gehen wir vorwärts, Hier haben
wir eine
Gitarrenkoordinate mit einer Startkoordinate und
einer Endkoordinate. Dies wird eine Liste von
Koordinaten von einem
Startendpunkt aus
erstellen . Ein Beispiel ist der Beginn von
Nullen 0 und ein Ende von 03. Aber lasst uns 00010 zurückkehren, um das Ziel dies darin besteht,
hier
eine Startkoordinate und eine
Endkoordinate zu übergeben . Und dann werden alle Koordinaten
zurückgegeben benötigt werden, um das gesamte Schiff zu
füllen. wir
hier vorankommen, sind wir im Einsatz oder werden im Grunde genommen
eine Koordinate überprüfen und sehen,
ob Einsatz oder werden im Grunde genommen
eine Koordinate überprüfen und sehen,
ob Schiffe das
tatsächlich verwenden werden. Dann haben wir hier Schiffe platziert, was eigentlich die
komplizierteste Funktion
innerhalb dieser Klasse ist. Wir werden das
Schiff leiten, es bekommt Größen. Wenn ich hier
rübergehe, wird dies ein neues Integer-Array
zurückgeben. In meinem Fall habe ich fünf
verschiedene Schiffsgrößen. Ich habe eine fünf lange,
äh, lange. Zwei Instanzen eines
dreistufigen Schiffes und schließlich A2 langes
Schiff mit ihnen Spieler. Hier werde ich
Schiffspunkte ausführen, um
alle Schiffe zu erhalten und zufällig zuzuweisen, ob jedes Schiff vertikal
sein soll oder nicht. Wenn ich hier in mein Board gehe, sehen
wir, dass fünf horizontal sind. Aber diese drei
hier sind vertikal. Aber diese drei
hier sind waagerecht. Twitter weist
jedem einzelnen Schiff, das
wir erstellen werden, zufällig einen vertikalen Booleschen Wert zu. Wir
weisen auch nach dem Zufallsprinzip eine Startkoordinate und fügen die Schiffsgröße hinzu, um die Endkoordinate zu
erhalten. Zum Beispiel wird diese
RNA-Koordinate fünf für sein, aber wir werden die Schiffsgröße
hinzufügen um die
Endkoordinate genau hier zu erhalten. Das werden 94. Sie daran, dass
a im Grunde 0 ist, weshalb J neun ist. Als nächstes heißt es eine Mischung
, dass alle Koordinaten es
dem Schiff ermöglichen , auf
das Brett zu passen und nicht von anderen Schiffen benutzt
werden. können Sie frühere
Methoden verwenden, die wir in dieser Klasse
erstellt haben . Im Grunde stellen Sie sicher, dass dies
eine einzigartige Koordinate ist ,
die tatsächlich funktioniert. Fügen Sie dann schließlich das resultierende
Schiff zur Schiffsliste hinzu, die
hier oben deklariert ist. Jetzt ist hier ein Tipp. Die X- und
Y-Werte der Startkoordinaten sollten randomisiert werden. So wird zum Beispiel genau hier, diese 54-Koordinate,
diese zufällig generiert. Aber die Endkoordinaten
x- und y-Werte sind einfach
die Schiffsgröße, einfach
die Schiffsgröße die der
Startkoordinate
hinzugefügt wird. Zum Beispiel
haben wir hier ein fünflanges Schiff. Also werden wir
das nehmen und fünf hinzufügen. Offensichtlich wird das
Starting eins als eins und nicht als 0 zählen. Also werden wir im Grunde nur mit einer Fünf-Lordschaft
enden. Außerdem solltest du nur das x oder das y hinzufügen
,
je nachdem, ob es
vertikal ist oder nicht. Nie beides. Im Grunde genommen hat
dies ein horizontales Schiff, was bedeutet, dass wir
nur das y hinzufügen. Wir sehen, dass das x vier ist. Die gesamte Zeit für dieses gesamte Schiff sind nur die
Y-Werte, die sich ändern. Zum Beispiel, f bis j. Wenn wir beide hinzufügen
würden, hätten
wir
hier ein
Fünf-mal-Fünf-Gitter mit einer riesigen Plattform, aber wir wollen eine tatsächliche
Darstellung eines Schiffes. Dies wird
etwas komplizierter sein, insbesondere auf einem Ort, an dem Schiffe
funktionieren als die letzte Klasse. Aber versuche so viele
dieser Dinge wie möglich zu erledigen. Und wenn
Sie das Gefühl haben, so weit wie möglich gegangen zu sein, oder sobald Sie alles
abgeschlossen haben, spielen Sie den
Rest dieses Videos ab, damit Sie sich ansehen
können, was
ich für die Lösungen getan habe. Beginnen wir ganz oben
für die Zufallsfunktion. Wenn ich das hier erweitere, erstelle
ich zunächst eine
zufällige Ganzzahl. Mit einem Maximalwert
der Platinengröße. In diesem Fall zwischen 09
, da die Platinengröße zehn ist. Dann sage ich, während die Zufallszahl plus die Bootsgröße größer
als die Boardgröße ist, subtrahiere
ich dann
die Zufallszahl. Werfen wir einen Blick auf dieses
fünf lange Schiff hier. Wenn unsere Zufallszahl
genau hier angefangen hat, was sechs ist, wissen
wir jetzt, dass sechs plus fünf, weil Zufälligkeit sechs Boote in diesem Fall fünf
heisst, das ist größer als
die Plattengröße von zehn. Wir werden es weiter subtrahieren, bis
es tatsächlich passt. In diesem Fall subtrahieren wir
nur einmal und geben uns diese Position. Und dann werden wir
die neue Ausgangsposition zurückgeben. Dies ist eine Lösung, um nach dem Zufallsprinzip einen
Startpunkt auszuwählen und
sicherzustellen , dass der
Ausgangspunkt tatsächlich
funktioniert , wenn es um die
Bootsgröße und die Platinengröße geht. Als nächstes haben wir alle Koordinaten
bekommen. Zu Beginn
erstellen wir eine Liste von Koordinaten, und wir werden diese Liste auch am Ende
zurückgeben. Dann müssen wir
diese Koordinatenliste tatsächlich
mutieren oder ändern , um alle gewünschten
Werte zu haben. Jetzt werden wir das x oder das y
hinzufügen,
je nachdem, ob es
vertikal oder horizontal ist. Hier überprüfe ich zuerst, ob
die x-Werte
zwischen dem Start- und
der Y-Koordinate identisch sind . Wenn wir uns zum Beispiel
das Boot ansehen, genau hier,
sind die X-Werte immer gleich. Sie sind immer vier. Daher hat dies
ein horizontales Boot. Damit muss ich Y-Werte
kontinuierlich erhöhen
. Jetzt bekomme ich hier den minimalen und den
maximalen Y-Wert. Und wir sehen genau hier,
dass ich nur Git benutze. Warum? Denn auch hier sind die
X-Werte immer gleich. Ich werde dann alle Y-Werte
durchlaufen. Ich füge der Koordinatenliste, die wir hier erstellt haben
,
eine neue Koordinate hinzu. Ich werde immer
denselben exakten x-Wert verwenden, aber ich werde den
Y-Wert von einer for-Schleife übergeben. Auf diese Weise ist der Ausgang immer wie er für dieses Boot
sein sollte, aber der Y-Wert ändert sich die
Stimme. In dieser else-Anweisung ist
dies genau das gleiche Konzept, aber anstelle des Y-Wertes
ist der x-Wert. Nachdem diese entweder ausgeführt wurden, geben
Sie dann die
Koordinatenliste zurück. Zukunft haben wir jetzt die einfachste Funktion hier
drin, die durchläuft eine Koordinate durchläuft und sehen
wird, ob eines unserer Schiffe es benutzen wird. Im Grunde schlaufen wir also
durch alle Schiffe. Wenn es unbenutzt ist,
kehren wir wieder wahr zurück. Sonst werden wir falsch
zurückgeben. Jetzt, wenn
wir hier vorankommen , haben wir die
komplizierteste Funktion, nämlich alle Schiffe zu platzieren. Wir werden damit
beginnen, dass wir
alle möglichen
Schiffe durchlaufen , die wir wollen. Dann weisen wir
nach dem Zufallsprinzip einen booleschen Wert zu, ob dieser vertikal
sein soll oder nicht. Wir erstellen dann
eine Liste von Koordinaten, aber wir werden ihr noch
nichts zuweisen. Jetzt sehen Sie vielleicht ein Keyword oder hören, dass Sie
nicht allzu vertraut sind. Was
ist zum Beispiel dieser Hauptdarm
oder vor dieser While-Schleife? Und was machen wir
genau hier? Grundsätzlich weil wir unsere Hauptschleife haben und
eine Schleife darin haben. Bei dieser for-Schleife muss ich
sicherstellen, dass ich
jede Schleife richtig beschrifte. Wenn das beispielsweise stimmt, möchte
ich unsere While-Schleife fortsetzen
. Aber weil ich
in der for-Schleife bin, wird
es davon ausgehen, dass ich die for-Schleife selbst
fortsetze. Trotzdem muss ich der While-Schleife
ein Label hinzufügen. Und dann kann ich mit
dieser spezifischen While-Schleife fortfahren und nicht in der for-Schleife. Werfen wir einen Blick darauf, was
die for-Schleife macht. Zuallererst
ist dies eine Endlosschleife, was
im Grunde bedeutet, dass
wir diesen
ganzen Code kontinuierlich ausführen werden, bis wir schließlich diese
Break-Anweisung hier erreichen. Wenn ich anfange, bekomme ich diese Start-X- und Y-Werte. Ich verwende diese dann, um Startkoordinaten zu erstellen. Dann bekomme ich
die Endkoordinaten, aber ich werde
diese nicht randomisieren. Stattdessen werde ich sagen, dass
Index und Ende y dem Start x oder
y plus der Bootsgröße
entsprechen. Wenn es sich um vertikale Boote handelt, nehmen
wir das
Start-X, und das ist alles. Aber wenn es
kein vertikales Boot ist, nehmen
wir das Start-X und fügen auf beiden Seiten hinzu. Dann ist es das
Gegenteil für das Ende. Warum? Wenn es ein vertikales Boot ist, nehmen
wir das
Start-Y und fügen auf beiden Seiten hinzu. Andernfalls verwenden
wir nur ein Start-Y. Und dann verwenden wir
diese beiden Werte um eine Endkoordinate zu erstellen. Dann weisen wir dieser
Koordinatenliste genau hier
einen neuen Wert zu. Dieser Wert wird
das Ergebnis der Gitarrenkoordinaten von
Anfang und Ende sein. Dies nimmt die Start
- und Endkoordinaten und alles dazwischen
und fügt sie einer Liste hinzu. Und das ist die Funktion, die
wir zuvor gemacht haben. Jetzt werde ich danach alle neuen
Koordinaten
durchlaufen , die wir gerade bekommen haben, und ich werde sicherstellen
, dass sie nicht benutzt werden. Wenn sie nicht benutzt werden, springen
wir zurück zum Anfang
der
While-Schleife und versuchen es im Grunde immer wieder und
immer wieder, bis Sie eine Reihe von Booten finden, die
vorher nicht benutzt wurden. Nun, wenn alle Boote wir exklusiv
gefunden haben,
was bedeutet, dass sie sich nicht
überlappen. In dieser for-Schleife wird
sich einfach durch
sich selbst laufen und
weiter in diese
Break-Anweisung gehen. Jetzt wird diese
Break-Anweisung
aus dieser gesamten While-Schleife ausbrechen . Und dann erstellen
wir hier ein neues Schiff, das in den gerade
befindlichen Koordinaten übergeht und dann das gesamte Schiff hier
in die Schiffsliste weitergeben . Dies ist also definitiv eine
der komplizierteren Funktionen. Ich glaube nicht, dass wir diese Etiketten hier überhaupt
abgedeckt haben, aber es gibt definitiv
andere Lösungen ,
die diese Etiketten nicht erfordern , die er möglicherweise finden
konnte. Aber wenn Sie nicht in der Lage waren,
den Platz Schiffe oder irgendetwas
anderes in der Spielerklasse zu bekommen . Keine Sorge, die
Funktion von Schiffen
war komplizierter als die
meisten Dinge, die
wir bisher behandelt haben.
50. Fertigstellung des Spiels: Dies wird das letzte Video
zum Schlachtschiff-Projekt sein. In diesem Video werden
wir
unsere Board-Klasse und
unseren Schlachtschiffkurs erstellen . Beginnen wir also mit der
Support-Klasse, die wir
innerhalb unserer Hauptfunktion
ein Neuengland-Sub erstellen . Und hier geben
wir sowohl die Boardgröße als auch den Spieler an, den
wir bereits erstellt haben. Jetzt in der Board-Klasse werde
ich einige
grundlegende Funktionen durchgehen und dann werde ich hier die Konzepte
hinter diesen verschiedenen
Funktionen
durchgehen . So kannst du weitermachen und
versuchen, sie selbst herzustellen. Und sobald Sie stecken bleiben oder die Funktionalität abgeschlossen haben, können
Sie sehen, wie
meine Lösungen aussehen. Ab sofort haben wir eine
Ganzzahl für die Boardgröße. Dies kommt einfach
vom eigentlichen Parameter. Dann haben wir auch ein
mehrdimensionales Zeichen-Array. Dies wird der
eigentliche Vorstand selbst sein. Dies ist beispielsweise Index 0, Index eins, Index 10 usw. Dann haben wir eine
Buchstabenliste, die alle verschiedenen Buchstaben
für die Spaltenkennungen enthält. Also im Grunde alle Buchstaben, die
wir hier oben sehen. Auf diese Weise haben wir keine 00
als Koordinate oder 10 als
Koordinate, bei unklar ist, welche
Spalten sind und welche die Zeilen sind, die Buchstaben verwenden,
macht dies sehr deutlich. Welches sind die
Spalten und Zeilen. Dann haben wir hier Zugang
zu einem Spieler
, den wir auch gerade von den Perimetern
bekommen. Und deshalb
weisen wir es einfach hier zu. Wir erstellen zuerst
ein Spielbrett, das wir uns hier gleich
ansehen werden. Und dann platzieren wir
die Schiffe, um das Spielbrett zu erstellen. Dies wird
jede Koordinate mit
dem Board mit einem bestimmten
Leerzeichen füllen . Zum Beispiel sind
Board-Indexnullen, 0 gleich Platz. Jetzt
sollten Sie natürlich nicht jede davon manuell zuweisen. Dies sollte
durch eine for-Schleife geschehen. Jetzt in Zukunft haben
wir hier Schiffe platziert. Dies wird durch
Spieler Dot Get Ships durchlaufen. Und um das ganz schnell zu überprüfen, bekommt
unter Schiffe genau hier. Dies gibt einfach eine Liste
aller Schiffe zurück , die an diesen Spieler
gebunden sind. Also holen wir alle
Schiffe mit einem Spieler
und dann bekommen wir
die
Schiffskoordinaten, um die X- und Y-Werte zu
erhalten. Wenn wir in die Schiffsklasse gehen, sehen wir
hier Abrufkoordinaten. Und das
gibt einfach eine Liste
aller Koordinaten zurück , die mit diesem Schiff
verbunden sind. Wir
weisen dann die Schiffsgröße als Charakter in
Board X und Board zu. Warum? Zum Beispiel wird hier dieses
fünf lange Zeichen, jeder einzelne
Board-Index, zum Beispiel dieser, dieses
und so weiter,
fünf genannt , weil dies das
fünf lange Schiff hier ist. Dies ist das vier lange Schiff. Hier haben wir das
drei lange Schiff. Die Charaktere werden also sein
, wie groß das Boot ist. Auf diese Weise ist klar, wo
das Boot anfängt und anhält. Und hier ist ein Tipp. Eine Ganzzahl zählt
als Zeichen, aber nicht so
, wie Sie es möchten. Sie müssen die Größe des
Schiffspunkts in eine Zeichenfolge mit dem
Zeichenfolgenpunktwert von konvertieren und dann auf das erste
Zeichen der Ergebnisse zugreifen. Der Grund dafür ist jedem einzelnen einzelnen
Zeichen
eine Zahl zugeordnet sein wird eine Zahl zugeordnet wenn
es um
seinen ascii-Wert geht, im Grunde
nur eine Tabelle dessen sein wird jedes einzelne Zeichen auf Ihrer Tastatur steht
in einem numerischen Wert. Sie können mit
Google Ascii Value oder
Ascii-Tabelle fortfahren , um
ein besseres Verständnis dafür zu bekommen ,
wovon ich spreche. Aber damit müssen
Sie sicherstellen, dass Sie die Schiffsgröße tatsächlich in
die gewünschte
reelle Zahl umwandeln , da sie standardmäßig nicht die
reelle Zahl darstellt. Aber im Grunde bedeutet dies
, dass die Größe
des Versandpunkts eine Zahl zurückgibt
, die Sie nicht erwarten. Und deshalb müssen Sie es
zuerst in eine Zeichenfolge mit dem Zeichenfolgenpunktwert von
konvertieren . Hier
bekommen wir einen Buchstabenindex. Und Sie können diese Funktion hier tatsächlich
sehen , weil sie nur
eine Zeile lang ist. Aber lasst es uns ganz schnell durchgehen. Hier kehren wir für jeden Buchstaben im
Buchstaben-Array in Amerika zurück. Also geben wir hier einen
bestimmten Brief ein. Und das ist die Alphabetisierung
könnte Index von sein, und wir werden den Index
dieses Buchstabens aus
dem Buchstaben-Array
zurückgeben dieses Buchstabens aus
dem Buchstaben-Array , das
einen Betrug definieren würde. Zum Beispiel
wäre a 0 und so weiter. Als nächstes werden wir versuchen, bestimmte Koordinaten
zu treffen. Dies würde sehen, ob eine Koordinate ein Treffer
wäre oder nicht. Wir werden den X- und
Y-Wert der Koordinate übergeben Y-Wert der Koordinate und es wird eine Zeichenfolge
zurückgeben. Wenn wir es verpasst haben, wird es genau hier Chaos
zurückgeben. Wenn wir treffen, wird es gleich hier
wieder getroffen. Wenn es ein Treffer ist,
würde das ein Schiff versenken, es würde stattdessen zurückkehren, du hast sein Schlachtschiff versenkt. Jetzt haben
wir endlich zwei Strings. Immer wenn wir
ein Objekt auf die Konsole drucken, wird die IF-Funktion aufgerufen. Wir können diese
Methode also überschreiben, um sie zu schaffen. Wenn wir also das Board auf
die Konsole
drucken , drucken
wir genau das, was wir wollen, was die Vollpension
sein wird, wie wir genau hier sehen. Dies wird gedruckt, weil
unsere Kumpel-Schiffsklasse, wann immer
wir
die Spielschleife ausführen, das eigentliche Brett
ausdrucken werden, aber das werden wir in einem Moment
hier behandeln. Dies wird alle
Boardkoordinaten
durchlaufen und
die richtigen Zeichen ausgeben
, wo sie sein sollten. Und ein Tipp hier ist,
zuerst
die Spaltenetiketten zu drucken , also die Buchstaben, wie
Sie hier sehen können. Drucken Sie dann jede
Zeile nacheinander aus,
beginnend mit der Zeilennummer und dann mit jeder Koordinate
für diese Zeile, wir drucken einfach die Zeilennummer
aus. Und dann werden wir
durchgehen und jede einzelne Koordinaten hinzufügen . Denken Sie daran, dass
diese Zeilen genau hier,
auch als Pipes bezeichnet, auch als Pipes bezeichnet indem Sie die Umschalttaste gedrückt halten und den umgekehrten Schrägstrich
drücken, der
sich direkt über der Eingabetaste befindet. Dann habe ich einen Platz. Dann habe ich den eigentlichen Inhalt für die einzelne Koordinate, dann ein weiteres Leerzeichen
gefolgt von mehr Zeilen. Diese Funktion hier
wird also
eine Zeichenfolge zurückgeben , die dieses
gesamte Board genau hier repräsentiert. Dies wird die
gesamte Board-Klasse sein. Versuchen Sie
, so viele
Fortschritte wie möglich zu machen , und kommen Sie dann zurück
und sehen Sie sich meine Lösungen an. Und danach gehen
wir auf die Konzepte hinter
der Schlachtschiffklasse ein, die nur zwei
Hauptfunktionen hat. Aber gehen Sie vorerst über die Board-Funktionalität und
versuchen Sie so viel wie möglich zu machen. Okay, hoffentlich konnten
Sie
die Funktionalität
für die Board-Klasse hinzufügen , oder Sie konnten so
weit wie möglich kommen. Lassen Sie uns nun
meine Lösung durchgehen wie ich
diese Funktionalitäten implementiert habe. Also hier haben wir
ein Gameboard erstellt. Wenn ich das erweitere, werden
wir jedes einzelne
Array des Boards
durchlaufen . Jede einzelne
Zeile wird also ein verschachteltes Array innerhalb des mehrdimensionalen
Arrays sein. Ich fülle dann diese
ganze Reihe mit einem Leerzeichen. Und wenn Sie eine verschachtelte
Schleife erstellt haben, um dies zu tun, ist
das auch vollkommen in Ordnung. Wie ich bereits
erwähnt habe,
gibt es mehrere verschiedene Möglichkeiten jedes Problem bei der Softwareentwicklung zu
lösen. Wenn du diesen
Code geschrieben hast, ist das in Ordnung. Wenn Sie ähnlichen
Code geschrieben haben, funktioniert das immer noch. Das ist auch in Ordnung. Als nächstes
schauen wir uns Platzschiffe an. Wenn ich das erweitere,
durchlaufen wir jedes einzelne Schiff
, das der Spieler hat. Dann werden wir jede
Koordinate dieses Schiffes
durchlaufen . Wir werden den X- und Y-Wert von diesen Koordinaten abrufen. Und wir können dann den
Board-Index XX und
XY gleich diesem
Ausdruck genau hier zuweisen . Dies geht auf das zurück, was ich bei der Verwendung der Schiffsgröße erwähnt
habe ,
die
in den Zeichenfolgenpunktwert von
Staub übergeben wird, da wir nach einem bestimmten Zeichen
suchen und jedes einzelne Zeichen seinen eigenen ganzzahligen Wert
hat. Da es sich um ein
Zeichen-Array handelt, können
wir ihm nicht einfach
eine Ganzzahl zuweisen, da jedes einzelne Zeichen auf Ihrer Tastatur
durch eine bestimmte Ganzzahl dargestellt wird. Und es wird davon ausgehen, dass dies tatsächlich der Fall sein
wird. Zum Beispiel das Zeichen
0, das durch numerisch 48 dargestellt wird, das Zeichen eins, das
durch numerisch 49 dargestellt wird, usw. Was wir tun wollen, ist
sicherzustellen, dass wir tatsächlich die
richtige Zeichenfolge verwenden. Wir
nehmen die Schiffsgröße und geben sie in eine Schnur weiter. Aber das
gibt uns natürlich eine
String-Variable , wenn wir
eine Zeichenvariable wünschen. Wir können also einfach
auf das Zeichen bei Index 0 zugreifen, dem es nur
einen Index gibt, da dieser nur einen
einstelligen Wert hat. Im Grunde wird dies jedoch die Schiffsgröße von fünf
in den Charakter fünf
umwandeln und diese
dann der
richtigen
Boardposition genau hier zuweisen . Dies wird also durch alle
Schiffe gehen und im Grunde nur die Fünf's dort platzieren, wo sich
das fünf lange Schiff befindet. Die Dreier sind, das drei
lange Schiff ist und so weiter. Jetzt, um hier voranzukommen, haben
wir einen Buchstabenindex , der früher
in einer einzigen Codezeile von FSS abgedeckt wurde. wieder vorankommen, werden
wir versuchen, bestimmte Koordinaten zu
treffen. Also
erstellen wir zuerst eine Koordinate mit dem X- und Y-Wert. Und dann werden
wir
jedes einzelne Schiff für genau
diesen Spieler durchlaufen . Wenn Sie sich von
der Schiffsklasse erinnern, haben
wir eine getroffene Funktion,
indem wir dazu übergehen. Hier wird
ein boolesches Array zurückgegeben , bei dem der
erste Wert sein wird, wenn es
ein Treffer war , und der zweite
Wert wird sein, wenn es
das Schiff versenkt, false. Falsch bedeutet, dass es ein Durcheinander war. Wahr falsch bedeutet, dass es ein Treffer war, aber es hat dieses Schiff nicht versenkt. Und es stimmt, es bedeutet,
dass es getroffen wurde und das Schiff
versenkt hat. Wenn ich also zurück zu meinem Board gehe, bekomme
ich Zugriff
auf alle Trefferdaten. Und dann kann ich
zwei separate Booleans erstellen. Oder hat getroffen ist Index
0 und Sink
wird index1 sein, wobei Zink
ging, um zu sehen, ob er wahr ist. Wenn ja, gehen wir zu X
diese spezifische Koordinate heraus. Wenn ich das Programm beispielsweise hier
ausführe, kann
ich B1 auswählen, um dies genau hier
darzustellen. Ich kann B1 eingeben und
es ändert diese drei in ein x
, weil das ein tatsächlicher Treffer war. Und es gibt auch die
Zeichenfolge zurück, die genau hier getroffen wurde. Um das zu tun, werden
wir hier zurückkehren, wenn eine
Senke mit einem ternären Operator verwendet wird, wir werden uns zurückgeben,
dass sie ein Schlachtschiff sind, aber sonst
werden wir den Treffer zurückgeben. Und genau hier
kommt die Stärke , die wir hier in
unserer Konsole sehen. Nun, nach dieser for-Schleife, wenn nichts tatsächlich übereinstimmt, bedeutet
das, dass es verpasst hat. Also werden wir
einfach den String Miss zurückgeben. wir hier vorankommen,
haben wir eine ToString-Funktion. Dies wird im Grunde
nur
das gesamte Board auf den Bildschirm drucken . Wir werden eine
StringBuilder-Klasse verwenden. Und es ist nichts
falsch daran,
eine normale Zeichenfolge zu verwenden und sie
einfach hinzuzufügen. Sie werden
im Grunde dasselbe tun. Aber ich verwende einen StringBuilder
, der es mir im Grunde erlaubt, der
Zeichenfolge sauberer Weise
mehr Dinge hinzuzufügen . Aber hinter den Kulissen wird es im Grunde nur zu einer
Zeichenfolge hinzugefügt. Hier fange ich
mit diesen zusätzlichen Leerzeichen an. Denn wenn ich zu meinem Programm gehe, sehen wir
das genau hier
bei uns hervorgehobenen Text. Dies sind die
Startbereiche, um sicherzustellen, dass die Spaltenbeschriftungen mit jeder
einzelnen Spalte
ausgerichtet sind . Dann bin ich etwas, das als Trennzeichen
bekannt ist, das man sich irgendwie als Trennzeichen
vorstellen kann. Und dies wird ein Raum sein,
gefolgt von einer Pfeife, gefolgt von einem anderen Leerzeichen. Und das sehen wir
genau hier zwischen jedem einzelnen Charakter
für die exakte Koordinate. Dann
füge ich einen Kommentar hinzu. Ich werde sagen, dass
dies die Spalten hinzufügen wird . Also werde ich die Plattengröße
durchlaufen denn Boards sind
immer ein perfektes Quadrat. Ich kann die
Platinengröße zwei verschiedene Male durchlaufen. Eine zum Hinzufügen der Spalten, eine zum Hinzufügen der Zeilen und
des einzelnen Inhalts. Hier füge ich
die Buchstaben dot get a an, die bei 0 beginnen und die
gesamte Platinengröße
durchlaufen, weshalb wir
das genau hier sehen. Ich kann jetzt
das ganze Ding durchlaufen. Als Nächstes hängen wir das Trennzeichen an die tatsächliche Zeichenfolge an fügen
im Grunde das Leerzeichen,
die Pipe und den zusätzlichen Speicherplatz hinzu. Aber wir wollen dies nicht
tun, wenn es
um das allerletzte Element hier geht , wie wir sehen, hat j am Ende keine zusätzliche Zeile. Um dies zu überprüfen, können wir sagen, ob a kleiner als die
Randgröße minus eins ist, wenn ich dies ändern würde, und ich werde dies
noch einmal ausführen, werden
wir eine zusätzliche
Zeile am Rand von j sehen. Was ich nicht wirklich mag, aber das liegt an dir, wenn
wir das haben wollen. Also werde ich das wieder in
das ändern, was es war. Jetzt geht es voran. Nachdem wir alle Spalten
hinzugefügt haben, fügen
wir eine neue Zeile
mit dem vier Schrägstrich
n Escape-Zeichen hinzu. Von hier aus. Es wird dann gleich hier unten
zur nächsten Zeile gehen. Jetzt fügen wir hier jede einzelne Zeile und den
tatsächlichen Inhalt für das Board hinzu. Im Wesentlichen
werden wir eine
verschachtelte for-Schleife haben ,
die sie
im Grunde zweimal durchläuft , einen für die x-Werte und einen
für die Y-Werte. Innerhalb dieser verschachtelten for-Schleife. Wir werden
dann a und B haben, die im Grunde x und Y
darstellen können. Dinge einfacher zu machen, klicke
ich
in die Nähe von a, und ich drücke die Umschalttaste
und F6 und benenne dies in x um. Dann mache ich
das Gleiche wie Shift und F6 und ich
kann das in y ändern. Jetzt macht uns das
klarer, wenn wir auf die Board-Werte zugreifen, die im Grunde nur das gesamte x
durchschleifen und y Koordinaten für
die möglichen Werte. Eine Sache, die ich tun
möchte, ist, wenn y 0 ist,
das bedeutet, dass wir gleich hier am
Anfang sind. Und deshalb möchten wir die Zeilennummer hinzufügen
, zum Beispiel 012 und so weiter. Also werden wir das genau hier hinzufügen
, und dann werden wir das Trennzeichen
anhängen,
das ist ein Leerzeichen , Rohrraum, den
wir genau hier sehen. Jetzt werden
wir danach
jeden einzelnen Charakter hinzufügen . Wir werden das
Board bei Index X und Index y hinzufügen. Hier ist 00, hier ist 01, ist 0, hier ist 10 und so weiter. Jetzt
werden die meisten davon Räume sein, aber natürlich wurden
sie, als die
Schiffe erstellt wurden, bestimmte
zufällige Zeichen
platziert wo die Boote tatsächlich sein
sollten. Danach hängen wir
einfach
das Trennzeichen so an, das Trennzeichen so nachdem wir
diesen Bereich hier ausgedruckt haben, hätten
wir ein anderes
Leerzeichen mit einer Pipe und einem anderen Leerzeichen, um
ein Leerzeichen zu erstellen macht es
einfacher, alles zu lesen. Und danach fügen
wir eine neue Zeile an. Dies geht zu dem, was diese Zeile genau
hier
nimmt und sie
in die nächste Zeile umschließt. Am Ende
der Funktion geben
wir dann Ergebnisse bei ToString zurück im Grunde nur die gerade erstellte
Zeichenfolge zurück. Das ist also alles
, wenn es um das eigentliche Board und das
Ausdrucken von Dingen geht. Wenn das für dich
kompliziert war, mach dir
keine Sorgen, das ist
völlig normal. Dieses Projekt soll
einige einfache Aspekte und
einige herausfordernde Aspekte haben . Wenn er in diesen Teilen stecken bleibt, mach dir
keine Sorgen, das ist
ganz normal. Aber jetzt, da wir unsere
Board-Klasse erstellt haben, gehen wir zu unserem
Schlachtschiffkurs und schauen wir uns
die letzten beiden Funktionen an, die
wir benötigen,
damit alles funktioniert. Bisher haben wir einen
Spieler erstellt und ein Board erstellt. Und jetzt laufen wir,
führen Game-Loop-Passing
in unserem Board aus. Es gibt zwei Funktionen
, die dem Rest dieses Projekts ähnlich sind. Ich erkläre
die Konzepte
dahinter und dann kannst
du sehen was du mit
diesen Konzepten machen kannst, und dann überprüfe
dann meine
Lösung im Vergleich zu deiner. Hier ist eine Beschreibung wie diese Spielschleife funktionieren
wird. Wir werden
eine Endlosschleife erstellen , die sechs
verschiedene Dinge erledigt. Die erste besteht darin,
das aktuelle Spielbrett zu zeichnen dieses Board-Objekt
im Grunde nur auf
den Bildschirm
auszudrucken , da wir hier unten eine
ToString-Funktion
erstellt haben . Immer wenn wir ein Portobjekt drucken, wird diese Funktion ausgeführt. Als Nächstes
drucken wir die letzte Aktion. Das war also entweder ein Miss, ein Hit oder ein Versenkung ihres Schlachtschiffs. Wir werden tatsächlich diese Zeichenfolge erstellen
wollen, die hier vor
unserer Wild Loop
erwähnt wird. Dann fragen wir den
Benutzer nach Koordinaten oder er kann
die Zeichenfolge quit eingeben. Wie wir hier unten sehen können, geben Sie
die Koordinate ein. Hier ist ein Beispiel oder
höre auf zu spielen. Wenn ich quit eintrete, wird das Programm
tatsächlich
geschlossen. Im Grunde treffen wir uns,
kehren wir von dieser Funktion zurück. Beachten Sie, dass vier das ist, was
ich gerade beschrieben habe. Beende das Spiel. Wenn quit eingegeben
wurde, diese fünf. Jetzt ist hier der
größte Teil der Logik. Schritt 5 besteht darin, zu prüfen,
ob die Koordinate gültig ist. Im Grunde bedeutet, dass es einzelne Charaktere
haben muss. Der erste ist ein gültiger Buchstabe , der hier Teil dieses
Arrays ist. Und die zweite ist eine gültige
Zahl zwischen 09, wenn von ihnen falsch ist oder es sich
nicht um eine lange Zeichenfolge
handelt, wird
sie weiterhin nach den richtigen
Koordinaten gefragt . Wenn ich
das zum Beispiel ausführe und
einfach nur a eintrete ,
wird es mich noch einmal fragen, wenn ich Z 0 eingebe, wird
es mich
noch einmal fragen, wenn ich eine 0 eingebe, wird
es tatsächlich funktionieren. Es muss eine gültige Koordinate sein. Und das werden
wir in dieser nächsten
Funktion genau hier
tun. Aber ich beschreibe, dass wir,
sobald
wir dort sind, zuerst prüfen werden,
ob eine Koordinate gültig war. Wenn ja, werden wir versuchen, diese Koordinaten
zu treffen. Dann speichern wir
die letzte Aktionszeichenfolge, um sie
auszudrucken , nachdem das Board der
nächsten Loop-Iteration
angezeigt wurde. Darum habe ich genau hier
erwähnt. Grundsätzlich werden
wir
vor einer While-Schleife eine Zeichenfolge haben , aber wir werden den Wert
bewerten, sobald
wir tatsächlich festgestellt haben,
ob es sich um eine gültige Koordinate handelt. Und nachdem wir versucht haben, diese Koordinate
zu erreichen
, werden wir auf diese Weise das aktuelle Spielbrett zeichnen
, wenn
wir
wieder zum Anfang laufen. Wir werden
die letzte Aktion drucken. Auf diese Weise vertuscht das Spielbrett es
nicht und dann werden
wir danach
weitermachen. Wenn die Koordinate nicht gültig ist
, springen wir zurück zu Schritt drei, der genau hier ist. Bitten Sie den Benutzer nach einer
Koordinateneingabe oder zur Eingabe von quit. Genau hier werden wir
tun, um immer wieder
zu schleifen, wenn sie keine
gültige Koordinate eingeben. Und hier kommen alle Teile
des Spiels zusammen. Nun wird diese Funktion
hier
diese nächste Funktion verwenden , die
eine gültige Koordinate ist. Wir werden eine Zeichenfolge übergeben, die die
tatsächliche Benutzereingabe sein wird. Wenn ich hier b5 eingebe, wird
die Zeichenfolge B5 in diesen
Parameter genau hier
eingegeben. Wir werden
auch ein Board haben. Und wenn wir uns die
genaue Beschreibung hier ansehen, wird
dies prüfen, ob
die Benutzereingabe gültig ist. Jetzt gibt es zwei Anforderungen. Der erste ist, dass es sich um
eine zweistellige lange Zeichenfolge handeln muss. Der nächste ist, dass es ein Buchstabe sein
muss. Es ist nur bis J, gefolgt von einer Zahl , die nur 0 bis neun ist. Jetzt
wird hier die Tip-Eingabe empfangen und Strings. Wenn Sie also einen int-Wert
des zweiten Zeichens erhalten, das 0 bis neun sein sollte, wirkt
sich nicht wie
0 bis neun aus. Stattdessen wird es sich
so verhalten, als wären es Ascii-Diagrammwerte, die ich
zuvor in diesem Video erwähnt habe. Dies bedeutet, dass das Zeichen
0 der Ganzzahl
48 entspricht und das Zeichen eins
der Ganzzahl 49 entspricht, und so weiter, bis das Zeichen neun der Ganzzahl 57 entspricht. Um zu überprüfen, ob die Zeichenfolgeneingabe
des zweiten Zeichens 0 bis neun
ist. Sie haben tatsächlich
überprüft, ob ganzzahlige Wert größer oder
gleich 48 und kleiner
oder gleich 57 ist , was
im Grunde bedeutet, dass 0
489 gleich 57 ist. Wir wollen also genau hier innerhalb
dieser beiden Werte sein. Machen Sie weiter und schreiben Sie die
Funktionalität dafür. Ich würde vorschlagen,
mit der gültigen
Koordinatenfunktion zu beginnen, da sie für die Spielschleife
erforderlich ist . Und wenn Sie das erledigt
haben, versuchen Sie, die Spielschleife
anzugehen. Und danach
können Sie Ihre
Lösungen mit meinen vergleichen. Beginnen wir mit der
gültigen Koordinate. Wenn ich das erweitere, werde ich zuerst
sehen, ob die Länge der Zeichenfolge nicht gleich zwei
ist. Wenn das stimmt, geben
wir false zurück da dies eine
zweistellige lange Zeichenfolge sein muss. Wenn ich zum Beispiel B5 eingebe, das drei Zeichen lang ist, wird
es mich dann noch einmal fragen, ob ich einen Test betreten habe, der
nicht zwei Zeichen lang ist. Es wird mich noch einmal fragen, und es wird ihn noch einmal fragen bis ich gültige
Koordinaten wie J neun eingebe. Jetzt ist das offensichtlich ein Durcheinander,
aber es hat tatsächlich funktioniert. Jetzt
erstelle ich danach ein Zeichen-Array, um die genauen Koordinaten
in die einzelnen Zeichen zu trennen . Das erste, was
mit diesen Informationen zu tun ist zu prüfen, ob der
Brief tatsächlich existiert. Board app.get Letter Index,
wie wir genau hier sehen, wird der Index
aus allen unseren
Buchstaben genau hier zurückgeben . Das heißt, wenn es nicht
existiert, wird
es
negativ zurückgeben. Dies wird im Grunde sicherstellen
, dass ein bis J verwendet wurde. Wenn dies nicht der Fall ist, werden
wir einfach falsch
zurückgeben. Aber wenn es verwendet wird,
werden wir fortfahren und die nächsten Werte überprüfen, die
0 bis neun überprüfen. Hier erstellen wir
eine Ganzzahl und eine Zeichenfolge ist
gleich einem Zeichen. Denken Sie daran, dass Array
ein Zeichen-Array ist,
was bedeutet, dass es sich um
einzelne Zeichen handelt , die
Zahlen haben , die sie darstellen. Zum Beispiel das Zeichen 0, dargestellt durch Ganzzahl 48. Das erste Zeichen wird
durch eine ganze Zahl 49 dargestellt und so weiter. Wir werden tatsächlich
sicherstellen, dass dies neun ist, indem sehen, ob der Wert
größer oder gleich 48 Anion ist. Wenn der Wert
kleiner oder gleich 57 ist. Wenn diese Bedingung
genau hier zutrifft, bedeutet
das, dass
alles korrekt ist wenn es um die
gültige Benutzereingabe geht. Scrollen wir jetzt nach
oben und machen wir die letzte Funktion
für dieses gesamte Projekt, das läuft Spielschleife. Ich nehme alle
Funktionen und stelle sie zusammen, um
tatsächlich nutzbar zu sein. Wenn ich das erweitere, machen wir zunächst einen Scanner. Und wir werden eine Zeichenfolge
erstellen, die als letzte Aktion bezeichnet wird. Und wir weisen
dies gleich Null zu. Wir werden
das später zuweisen. Dies wird entweder
das Chaos oder der Treffer sein, oder die USA haben ihre
Schlachtschiffsaite versenkt. Und wir werden das
zuerst machen , weil wir das Board ausdrucken
wollen. Und dann
werden wir gleich
danach die letzte Aktion ausdrucken. Auf diese Weise wird es nicht automatisch
durch das Board ersetzt. Zum Beispiel, wenn ich das
vorher ausdrucken würde , eine Stunde, um uns zu leiten. Wenn ich
zum Beispiel eine 0 eintrage , verdeckt das
Board es. Wenn ich hier oben scrolle, sehen
wir das Chaos. Deshalb müssen wir
eine Zeichenfolge außerhalb
der While-Schleife erstellen . Es wird also nicht jedes Mal zurückgesetzt, und wir können es dann
ausdrucken, wenn es tatsächlich existiert. Als Nächstes erstellen wir eine
Zeichenfolge namens Koordinaten, die die Benutzereingabe
erhält. Hier haben wir eine
Do-While-Schleife, die, wenn Sie sich erinnern, im Grunde genommen
diesen exakten Code mindestens
einmal ausführen wird , egal was passiert. Danach
wird
dieser Code weiterhin ausgeführt, solange dieser
Ausdruck genau hier zutrifft. Werfen wir einen Blick darauf,
was dieser Code darin ist. Hier drucken wir innere Koordinaten
aus, Beispiel eine 0 oder beenden, um die Wiedergabe
zu beenden. Wir erhalten dann das nächste Wort, das der Benutzer eingibt. Und wir werden das in Großbuchstaben umwandeln
. So würde alles wie Kleinbuchstaben eine 0 zu Großbuchstaben Israel werden. Und das macht es uns einfacher
, Dinge zu vergleichen. Danach werden wir
einfach
sehen, ob die Eingabe beendet wurde. Wenn ja, kehren wir
von der Hauptfunktion zurück, die wiederum hierher
zurückkehren und dann
einfach das Hauptprogramm beenden würde . Aber vorausgesetzt, dass sie
nicht in quit eingetreten sind, werden
wir sehen, ob
es sich um eine gültige Koordinate handelt. Wir werden hier auch einen
NOT-Operator verwenden. Grundsätzlich heißt, wenn dies keine gültige Koordinate mit der angegebenen
Kabelendplatine
ist, werden wir
weiter durchleben bis der Benutzer
eine gültige Koordinate eingibt. Aber wenn sie
gültige Koordinaten eingeben, werden
wir fortfahren und diesen ganzen Code genau hier
ausführen, beginnend mit dem Abrufen
eines Zeichen-Arrays. Und das ist ein ähnliches
Konzept wie das, was wir
zuvor mit der gültigen
Koordinatenfunktion hatten das, was wir
zuvor mit der gültigen
Koordinatenfunktion Wir erhalten ein
Zeichen-Array mit
Index 0 wird
der Buchstabe und wird
der Buchstabe und Index sein die Zahl. also hier wieder nach oben scrollen, erhalten
wir die Spalte , die Board Dot
Letter Index, Array-Index 0 ist. Jetzt wird der Index
davon im Grunde genommen ein bis J
in eine 0 bis neun
umwandeln. Der Benutzer sieht ein bis J, aber das Programm verwendet nicht
tatsächlich ein bis J. Wir verwenden unterschiedliche Zahlen
für die tatsächlichen Spalten. Also auf 0 bis neun. Und das ist eigentlich
der Index jedes einzelnen Charakters. Wenn wir zu unserem Board gehen, hat
dies
Index 0, Index eins, bis
zu Index neun. Wenn Sie den Index
aus dieser Liste abrufen , erhalten Sie die
richtige Y-Koordinate und geben uns
daher die Spalte. Für die Zeile
nehmen
wir einfach genau diesen Charakter an und wir werden 48 aus genau den
gleichen Gründen
subtrahieren wie wir hier unten mit
allen Ascii-Beispielen sehen. Grundsätzlich entspricht Zeichen 0 48. Wenn wir also 48 subtrahieren, bedeutet das, dass
jede Zahl, die wir haben , eine gültige Ganzzahl sein wird. Es geht wieder hier hoch. Die letzte Aktion wird
gleich Brett, um einen Treffer zu versuchen, indem die Zeile
und die Spalte übergeben wird. Und das wird
die Versuchshit-Funktion aufrufen, die dann
durchlaufen würde und sehen würde, ob ein Schiff
tatsächlich da war. Und dann gib eine Saite zurück,
je nachdem, ob ich tatsächlich getroffen oder ob sie verpasst hat oder ob
ein Heiliger dieses Schiff ist. Und so funktioniert das
gesamte Programm. Wenn ich das noch einmal laufe, da wir jetzt sehen, wie
alles funktioniert, kann
ich jetzt zum Beispiel B3 eingeben. Und es wird zu viel aussteigen. Wenn ich b2 eingebe, was
darüber liegt, wird es Miss sagen. Und ich kann weiter B4,
B5 eingeben . Endlich sei sechs. Und jetzt heißt es,
glaubst du, dass sie ein Schlachtschiff sind? Weil alle Koordinaten
jetzt x out für dieses Schiff sind. Und jetzt haben wir ein komplett funktionierendes
Einzelspieler-Schlachtschiff-Spiel, das wir
zusammen mit Java aufgebaut haben.
51. Schlussbemerkung: Dies schließt meinen gesamten
Java-Kurs für Anfänger ab. Ich möchte mich bei dir
dafür bedanken, dass du den Kurs belegst. Und wenn wir in meinen Tutorials mehr über
Softwareentwicklung
erfahren möchten , dann checken Sie meinen
YouTube-Kanal mit abgenutzten Schlüsseln aus.