Transcription
1. Introduction: Java est l'un des langages de
programmation les plus faciles à apprendre, ce qui le rend parfait pour les débutants. Dans ce cours, je vais vous
guider étape par étape dans la
programmation et
Java. À la fin de ce cours, vous allez créer de vrais
programmes en utilisant Java. Et vous aurez une
solide compréhension des bases
et des fondamentaux de la programmation. Programmation de four en
Java depuis 2011. Et j'utilise même Java pour créer mes propres serveurs de jeux
startup dans ce et 14, j'ai gagné un revenu à temps plein de son projet pendant quelques
années avant de le vendre. J'ai donc beaucoup d'expérience dans
l'utilisation de Java et j'ai hâte de
partager mes connaissances avec vous tout au long de ce cours.
2. Installer IntelliJ: Avant d'apprendre Java, nous avons besoin d'un endroit où nous pouvons réellement écrire et exécuter notre code. C'est ce qu'on appelle un IDE, qui signifie Integrated
Development Environment. C'est une
façon super chic de dire qu'il s'agit d'un éditeur de texte qui
convertira également votre code en
un programme réel. La
norme industrielle pour les IDE
et Java va maintenant s'
appeler intelligence. Vous pouvez donc simplement télécharger intelligemment
Google. Il s'agit d'un logiciel libre. Allez-y et cliquez sur
le lien en haut ici, et assurez-vous de
sélectionner Community Edition. Ils sélectionnent également le
système d'exploitation approprié sur lequel vous utilisez. Je suis sous Windows, ce qui
est par défaut. Je vais donc rester
ici sous l'onglet Windows. Je peux ensuite cliquer sur Télécharger. Et votre téléchargement devrait commencer. Et sur la plupart des navigateurs
qui devront accepter que vous
vouliez télécharger ce fichier. Une fois le téléchargement terminé, vous pouvez cliquer dessus ici. Nous avons ici l'installateur
actuel. Il s'agit d'un installateur assez
standard. Eh bien, il suffit de cliquer sur
Suivant environ 800 fois et vous
devriez être prêt à partir. Je vais juste
passer en revue et
tout garder ici, la valeur par défaut. Ensuite, je
vais mettre en pause
l' enregistrement pendant que l'
installation est en cours. Après la désinstallation, nous pouvons aller l'avant et cliquer sur cette
case à cocher ici, puis enfin
cliquer sur Terminer. Une fois que vous l'avez ouvert, vous
devez être envoyé sur
une page similaire à celle-ci. Vous allez vouloir
cliquer sur Nouveau projet. Maintenant, sur cette page, vous
voulez
vous assurer que vous avez sélectionné Java en haut. Il devrait s'agir de la valeur par défaut. Et pour le SDK du projet, nous pouvons choisir
la valeur par défaut. Mais si vous ne voyez pas de valeur par défaut, vous pouvez télécharger un JDK. Nous pouvons donc cliquer dessus et vous pouvez sélectionner la
version souhaitée. N'importe quelle version devrait le faire. Nous n'allons rien
faire. C'est un cours de processus très
dépendant de la version. Il suffit de cliquer sur le téléchargement. Maintenant, en supposant que vous ayez
déjà un SDK, nous pouvons simplement cliquer sur
suivant, puis sur suivant de nouveau. Et enfin, nous pourrons donner un chemin à notre
projet et à un nom. Nous pouvons cliquer sur les trois
points ici pour parcourir. Je vais sélectionner mon dossier
Java ici, et je vais
créer un nouveau dossier. Celui-ci s'appellera un
espace de travail. Ici, ici. Je vais juste le
sélectionner, puis cliquer sur OK. Désormais, le nom du projet est Workspace par
défaut. C'est très bien. Je vais aller de
l'avant et cliquer sur Terminer. Maintenant, intelligent est enfin ouvert. Sur la gauche, nous
avons ce projet que nous pouvons basculer en cliquant sur. Cela va
afficher tous les fichiers et dossiers de
notre espace de travail. Maintenant, partout ailleurs dans ce panneau géant,
c'est ici que notre code sera affiché. Mais nous n'avons aucun
code ouvert pour le moment. Mais maintenant que l'intelligence
est installée avec succès, nous sommes prêts
à commencer à écrire code avec la prochaine vidéo.
3. Bonjour monde: Nous sommes maintenant prêts à travailler enfin sur notre tout premier programme Java. Et il est courant
d'imprimer simplement le texte bonjour world à l'écran
comme tout premier programme, peu
importe la langue ou l'
apprentissage qui va
continuer ici, naviguez vers
le dossier source. Et ici, nous devons créer un
nouveau dossier à l'intérieur. Vous pouvez cliquer avec le bouton droit de la souris, accéder à
Nouveau et sélectionner le package. Un paquet n'est essentiellement
qu'un dossier. Et un programmeur Java
utilise des paquets, un moyen d'organiser tous vos fichiers
de code. Vous pouvez avoir plusieurs fichiers de
code à l'intérieur des packages et vous pouvez avoir plusieurs paquets
dans votre projet. Pour l'instant, nous allons
travailler avec un seul paquet. Allez-y et cliquez ici avec le bouton gauche. Nous devons maintenant
entrer un nom de paquet, ce qui doit être unique. Une pratique courante consiste maintenant
à utiliser un domaine inversé. Par exemple,
com.google.com.YouTube. Mais évidemment, ce ne devrait pas être l'un des domaines les plus populaires, mais plutôt le vôtre. Et si nous ne possédons pas de domaine, ne vous inquiétez pas, vous n'en avez pas besoin. Techniquement, vous pouvez
entrer tout ce que vous voulez. Mais par exemple, pour suivre les conventions de
dénomination standard, faisons quelque chose comme com dot alex dot Flores ou autre
chose comme ça. Évidemment, cela a mon
nom et vous pouvez utiliser votre propre nom si vous le souhaitez ou quelque chose de complètement inventé. Je vais nommer ce paquet le domaine exact que je possède. Ainsi, par exemple, com
dot usé des clés. Maintenant, si j'appuie sur Entrée, nous voyons que ce dossier a été
créé ici. Maintenant, ici, je peux
créer mon propre fichier, afin que je puisse cliquer avec le bouton droit de la souris,
accéder à une nouvelle classe Java. Et ici, nous avons quelques
options différentes. Nous allons nous en tenir
à une classe standard. Je vais expliquer la
différence entre tous ces éléments dans les prochaines vidéos. Le nom de classe que je vais
appeler ce Hello World avec un H majuscule et un W
majuscule et aucun espace. Il est très important qu'aucun de ces fichiers n'ait d'
espace dans son nom. Une fois que vous avez appuyé sur
Entrée,
quelques morceaux de code seront écrits ici. Si vous développez ce dossier, vous voyez maintenant le Hello
World Class ici. Maintenant, les détails de ce que font chacun de ces éléments seront
abordés dans une prochaine vidéo. Pour l'instant, nous allons simplement
ajouter à ce code existant. Maintenant, si vous cliquez sur cette
accolade qui s'ouvre ici, vous pouvez appuyer sur Entrée et vous pouvez dire que nous avons
automatiquement des onglets. Et une fois maintenant tabulation, c'est très important dans n'importe quel
langage de programmation, car cela rend votre code beaucoup
plus facile à lire. Et l'avantage de
cela devient beaucoup plus
évident plus tard une fois que nous
avons des fichiers beaucoup plus volumineux. Mais pour l'instant, nous n'avons pas
à nous soucier des gros fichiers. Notre objectif en ce moment est simplement d' imprimer le texte Hello
World à l'écran. Je vais maintenant écrire un code. Allez-y et
suivez-moi et lancez ce parcours. Nous allons comprendre
ce que fait chaque partie de ce code. Mais la plupart de ces choses ne vont pas
être expliquées pour le moment. Pour commencer, je peux dire que les parenthèses
publiques, statiques, vides ,
principales, puis les parenthèses
et les parenthèses finales doivent être générées
automatiquement. Et ensuite, nous pouvons mettre un espace puis une accolade bouclée, et semblable aux
parenthèses et à la fin de l'accolade bouclée sera
automatiquement générée. Maintenant, entre les
deux accolades, si vous appuyez sur Entrée ou C, il y avait également une fois de plus la fin à
onglets. Nous devons revenir entre parenthèses et taper chaîne avec un espace S.
majuscule. Ensuite, un crochet carré et un
crochet de fin seront ajoutés. Et puis on peut taper des arcs. Maintenant, nous venons d'écrire beaucoup de code et la plupart vous semble
très déroutant. Ne vous inquiétez pas du tout à ce sujet. Tant que votre code
ressemble à ceci et qu'il
n'y a pas de lignes rouges nulle part,
vous êtes prêt à partir. Et mes lignes rouges tordues, j'ai fait quelque chose comme ça. Ici, nous voyons cette ligne
rouge tortillante juste ici. C'est une intelligence
pour nous faire savoir qu'il y a une
erreur dans notre code. On le survole.
Il va dire que c'est une
parenthèse de fin comme prévu. Je peux donc en ajouter un ici, et cette erreur disparaît. Encore une fois, si vous êtes confus en ce
moment, ne vous inquiétez pas, tout sera expliqué au fur et à mesure que nous continuerons tout au long
du cours. La prochaine étape sera
expliquée maintenant,
notre objectif est d'imprimer
quelque chose sur la console. Nous pouvons le faire en tapant un
système avec un LN majuscule S, dot out, point print. Nous pouvons ajouter une parenthèse et une parenthèse finale sera
automatiquement ajoutée. Ici, nous pouvons ajouter un guillemet double et similaire
à tout le reste, et la fin du double
guillemet sera ajoutée. Nous avons maintenant une erreur
à la fin ici. Si je survole ça, on s'attend à un point-virgule. Je peux en ajouter un et ici,
semblable à une période avec une phrase anglaise est un point-virgule termine une déclaration ou
une phrase Java. À la fin de la plupart des lignes, vous allez ajouter
un point-virgule. Et vous avez peut-être remarqué
que nous n'avons
pas point-virgule ici,
sur la ligne 6 ou sept. La raison en
sera expliquée ultérieurement. Mais généralement,
la plupart des lignes de code que vous allez écrire devraient comporter
un point-virgule à la fin. Maintenant, dans ces
guillemets doubles, nous pouvons ajouter le
texte que nous voulons. Et comme nous avons imprimé
sur la console, par
exemple, je peux
ajouter Helloworld. Ensuite, je peux
aller à Run en haut, parce que cliquez ensuite
sur Exécuter ici. Vous pouvez également utiliser
un raccourci affiché ici. On a ce pop-up ici. Nous voulions cliquer
sur Hello world. Et maintenant, nous voyons qu'
il est en train de construire. Maintenant, on peut juste
apparaître ici. Je vais aller de l'avant et baisser cette hauteur juste pour avoir plus de place pour travailler avec le code. Mais nous voyons le
texte Hello world, et que le processus s'est terminé
avec un code de sortie de 0. Le 0 d'un cadre signifie
essentiellement que tout s'est bien passé et qu'il n'
y a pas eu de problèmes. Maintenant, si nous le
voulions, nous pouvons ajouter différents
points d'exclamation dans la chaîne. Et au lieu de parcourir
toutes ces zones déroulantes ici, nous pouvons simplement cliquer sur cette
flèche verte en haut à droite. Vous pouvez également appuyer sur Maj plus
F2, selon celui que vous préférez. Si je clique dessus, nous
voyons maintenant qu'il va
reconstruire notre projet. Et nous voyons maintenant Hello World
avec des points d'exclamation. Par la suite. Vous avez maintenant terminé votre
tout premier programme Java. Je sais que beaucoup de ce code semble
très déroutant en ce moment, mais tout sera expliqué fur et à mesure que nous poursuivrons le cours.
4. Commentaires: Lors de la programmation,
nous ne pouvons pas simplement écrire tout ce que nous voulons car
ce code Java n'est pas valide. Et donc si je les survole, ils vont dire
qu'il y
aura des erreurs liées
à ce code. Mais parfois, vous
voudrez peut-être ajouter des notes différentes ou bien être appelé
commentaires dans votre code. Cela vous aidera, vous ou vos collègues mieux comprendre ce
qui se passe dans le code. Par exemple, je peux faire deux barres obliques
avant ici, puis je peux dire imprimer
bonjour world sur la console. Dans cet exemple précis, nous ne voulons probablement pas
ajouter de commentaire pour cette ligne car la ligne est de toute façon assez
explicite. Mais c'est ainsi que vous ajoutez
correctement un commentaire. Cela n'aurait aucun effet sur
le programme ou sur ce qui est
imprimé sur la console. C'est juste là comme une note pour les autres programmeurs
et vous-même. Maintenant que nous avançons
dans ce cours, vous allez voir
ce qui
devrait et ne devrait pas avoir un
commentaire. Encore une fois, une ligne comme celle-ci
est très explicite, donc nous n'avons pas besoin d'
ajouter de commentaires. Maintenant, alternativement,
nous pouvons ajouter des commentaires sur
plusieurs lignes en faisant une étoile oblique. Et puis une barre oblique d'
étoile de fin et intelligente
fait la fin pour nous. Ici, je peux dire qu'il
s'agit d'un commentaire. Tout ce texte
ici est grisé parce qu'il ne s'agit pas d'un code
technique, mais plutôt d'un commentaire.
5. Variables: Nous allons maintenant
parler de l'un des concepts
les plus importants en
matière de programmation. Et c'est là le
concept de variables. Comme si vous considérez une
variable comme un conteneur qui contient une
sorte de valeur. La RAM ou la mémoire de votre ordinateur est essentiellement un tas d'étagères
qui contiennent ces conteneurs. Maintenant, chaque conteneur
aura un nom et la valeur à l'intérieur peut être lue
ou modifiée à tout moment. Par exemple, créons un entier qui n'est essentiellement
qu'un nombre entier. Je peux dire dans l'espace. Et maintenant, nous devons
nommer notre variable. Cela devrait être
descriptif. Nous ne devrions pas avoir de
variables nommées a ou X ou des éléments de ce genre qui
ne sont pas très descriptifs. Donc, dans ce cas, je veux que cela
maintienne mon âge actuel. Je vais donc taper l'âge. Je nomme donc cet âge variable. Vous pouvez le nommer essentiellement
tout ce que vous voulez. Mais il y a certaines règles que je vais examiner plus tard
dans cette vidéo. Ensuite, nous allons
ajouter un signe égal. Et après le signe égal, nous pouvons ajouter n'importe quel nombre. Dans ce cas, il sera 28. Et enfin,
nous devons ajouter en point-virgule ce qui se passe
réellement ici ? Eh bien, l'int va
essentiellement
dire à Java que nous
voulons créer une variable, et cela va contenir
un type entier de valeur. Il existe différentes
valeurs des variables qui peuvent contenir et nous les couvrirons
plus tard dans la vidéo. Maintenant, chaque variable
a besoin de son propre nom. Dans ce cas, nous
lui donnons le nom d'âge. Ensuite, nous avons
un signe égal, qui est techniquement connu
sous le nom d'opérateur d'affectation. Cela va prendre la
valeur à droite
et l' attribuer à la
variable de gauche. Et puis, bien sûr, nous
avons l'âge et vous pouvez ajouter le
numéro que vous voulez ici. Il pourrait être 999, il pourrait être 0, il pourrait être négatif 5 mille. N'importe quel nombre entier fonctionnera. Mais par souci de simplicité,
je vais juste ajouter mon
âge actuel, qui est de 28 ans. Alors, que pouvons-nous réellement
faire avec cette variable ? chose la plus basique que nous puissions faire est probablement de l'
imprimer sur la console. Au lieu d'écrire la ligne
system.out.print à chaque fois, l'
intelligence nous
donne un raccourci car il s'agit d'une
longue ligne de code à écrire. Je peux donc taper S0
UT pour la sortie du système. Si j'appuie sur Entrée, il générera automatiquement
cette ligne de code pour nous. Maintenant, il ne génère pas les guillemets doubles et
c'est intentionnel. Si je devais ajouter
les guillemets doubles et ensuite l'âge auquel
nous exécutons ce programme, nous voyons simplement le mot
âge et notre console. Mais ce n'est pas ce que nous voulons. Nous voulons voir la valeur à
l'intérieur de la variable d'âge. Nous devons supprimer
ces guillemets doubles, sorte qu'ils n'afficheront pas
ce qu'on appelle une chaîne. Une chaîne ressemble essentiellement une phrase ou à un
ensemble de caractères, quelque chose qui constitue
des textes réels. Maintenant, sans les guillemets, il va essayer de référencer la valeur à l'intérieur de
la variable d'âge. Dans ce cas, il atteindra le conteneur
que j'ai
mentionné précédemment, et il retirera la valeur de 28, puis l'enverra
au client. Loin de nous lier encore. Nous devrions maintenant en voir 28 dans la console comme
nous le faisons ici. C'est un exemple de ce que
nous pouvons faire avec les variables. Nous pouvons également réattribuer une valeur. Par exemple, disons que
j'ai un anniversaire, je pourrais dire que l'âge est égal à
29 ans avec un point-virgule. Remarquez comment je n'utilise pas
l'int ici. Lorsque je fais cela,
il y a une erreur. Si je le survole, cela indique que l'âge variable a
déjà été défini. Donc, fondamentalement, l'int
n'est là que lorsque nous
créons la variable. Mais une fois qu'elle a été créée,
nous pouvons toujours modifier cette valeur en réaffectant
une valeur comme celle-ci. Maintenant, pour le prouver, je peux l'
imprimer sur la console. Donc, je pourrais imprimer l'âge. Et si je fais ça, on en
voit maintenant 28 et 29300. Un entier
n'est donc qu'un nombre entier, mais il existe
d'autres types de variables. Par exemple, si je
supprime tout cela, je peux maintenant dire que la chaîne avec un nom S
majuscule est égale à Alex. Et remarquez à quel point je suis rapide à
l'intérieur des guillemets doubles. Si je disais juste Alex ici, on pourrait penser que
nous recherchons une variable portant ce nom,
mais il n'y en a pas. Donc, pour dire à Java que nous
travaillons avec une chaîne de caractères tels qu'une phrase ou un message, un type de texte. Ensuite, nous allons ajouter
nos guillemets doubles. Java ne recherchera pas
une variable nommée Alex, mais nous traiterons
cette variable comme une chaîne de texte. Maintenant, bien sûr, nous pouvons mettre
cela sur la console. Je peux imprimer mon nom. Et si je fais ça, on
verra Alex dans la console. Mais il existe de nombreux
autres types de variables. Par exemple, nous avons un booléen. Boolean Jeff représente
une valeur vraie ou fausse. C'est tout ce que ça fait. Par exemple ici, je peux dire que la
programmation est vraie. Maintenant, vrai n'est pas entre guillemets car ce n'est
techniquement pas une chaîne. True ou faux, qui est la seule autre option
pour un booléen, sont techniquement des
mots-clés en Java. Nous sommes en mesure de
les écrire simplement dans notre code. Par exemple, si c'est vrai, je peux maintenant imprimer en programmation. Maintenant, si je l'exécute, nous devrions
voir vrai dans la console. Bien sûr, tout comme les entiers, nous pouvons réaffecter des études de valeurs. Donc je peux dire que
la programmation est fausse. Et si je l'exécute,
nous allons maintenant voir False dans la console. Maintenant, je vais
supprimer cette ligne ici. Et vous remarquerez peut-être comment
j'ai nommé sa programmation. J'ai un
I minuscule et un
P. majuscule Dans les noms de variables, nous ne pouvons pas avoir d'espaces. Ainsi, chaque fois que nous avons
plusieurs mots, il est courant d'
utiliser quelque chose connu sous le nom de notation CamelCase. La notation camel est lorsqu'un mot est écrit avec la toute
première majuscule étant en minuscules. Mais chaque mot après cela a une
lettre majuscule au début. Il est donc très facile à
lire sans espace. Comparez cela à la notation
camel. C'est évidemment
beaucoup plus difficile à lire, surtout pour les autres
personnes qui ne font que lire votre code
et qui ne l'ont pas écrit. Ils ne savent donc pas
exactement ce que c'est. D'autres règles impliquent
que les variables ne peuvent pas avoir de nom
difficile pour le nombre. En règle générale, vous ne devriez pas
le faire de toute façon,
donc ce n'est pas très descriptif. Mais si, pour une raison quelconque,
vous le souhaitez absolument, vous pouvez l'ajouter dans un
trait de soulignement pour commencer. Il devient alors un nom de variable
valide. fur et à mesure que nous avançons
tout au long du cours, vous verrez d'autres exemples de noms de
variables afin que nous puissions avoir une meilleure idée de ce qui constitue
une bonne convention de dénomination. Passons maintenant à
d'autres types de variables. Ensuite,
nous avons un caractère similaire à une chaîne, mais il ne représente qu'
un seul caractère. Par exemple, je peux
dire que la lettre est égale à a. Et ceux-ci utilisent des
guillemets simples, pas des guillemets doubles. Si je devais ajouter
plusieurs personnages ici, ça ne va pas aimer ça
et ça va se plaindre. Encore une fois, ils n'utilisent qu'
un seul caractère. Nous avons également un double, qui est similaire à un entier, mais ce sera bien sûr n'importe quel nombre. Il ne faut pas qu'il
s'agisse d'un nombre entier. Par exemple, l'âge est égal à 28,5 ans. Ce serait un double valide, mais j'utilise le même nom
qu'une variable existante. Je vais donc
dire que l'âge est double. Une autre
règle de dénomination est que chaque nom
doit être unique. Sinon, il ne saurait quelle variable vous référenciez
exactement.
6. Entrée utilisateur: présent, nous venons d'imprimer
des choses sur la console. Mais que se passe-t-il si nous
voulions
recevoir les commentaires des utilisateurs qui
utilisent votre programme ? Dans ce cas, ce ne
serait que nous. Mais que se passe-t-il si nous voulons entrer certains nombres ou
noms ou d'autres choses genre et que
cela soit réellement compris dans
notre programme DAW ? Pour ce faire, il va s'agir de
quelques concepts. Il y aura un peu de
confusion et sera
très hors de portée
de cette vidéo ici. Ce sont des concepts qui seront expliqués plus tard dans
le cours, mais ils sont beaucoup trop compliqués
à expliquer en ce moment. Alors allez-y et
codez avec moi et sachez que ceux-ci
seront expliqués plus tard. Commençons donc par créer quelque chose connu sous le nom de scanner. C'est ce qui est utilisé pour recevoir
des informations dans notre console. Je peux donc dire scanner avec un S
majuscule, j'appuie sur Entrée. Nous allons maintenant
importer un scanner. C'est quelque chose qui
est intégré à Java, mais pour pouvoir l'
utiliser dans ce fichier, nous devons importer tout
ce code dans ce fichier. C'est ce que fait cette ligne
ici. Maintenant que nous avons créé un scanner similaire aux variables que nous avons
examinées dans la dernière vidéo. Nous devons donner un nom à cela. Je vais appeler cette entrée. Ensuite, nous pouvons utiliser un opérateur d'
affectation ou un signe égal pour attribuer
une nouvelle valeur à cela. Maintenant, cela va être
quelque chose qui sera expliqué plus
en détail plus
tard dans le cours. Mais pour l'instant, il suffit d'aller de
l'avant et de coder. Ici. Je vais dire un nouveau scanner spatial avec un S majuscule, puis des
parenthèses par la suite. Maintenant, je reçois cette erreur ici. Lorsque je survole cela, il est dit que scanner du
constructeur
ne peut pas résoudre. Encore
une fois, le concept de constructeur et la raison pour laquelle
cette erreur se produit, il sera abordé
dans une prochaine vidéo. Mais pour l'instant, passons à l'intérieur des parenthèses
à
moins d'ajouter un système avec un S point n
majuscule ce qui devrait
éliminer l'erreur. Nous sommes maintenant prêts à
recevoir des entrées de la console. Commençons par
une simple corde. Par exemple, je peux dire que le
nom de chaîne est égal au point d'entrée suivant. Et cela va renvoyer
une chaîne par défaut. Ensuite, je peux imprimer les
noms de la console. Donc OUT et nom. Et veillons à ce que l'
utilisateur sache quoi faire. Je peux dire S OUT, puis je peux entrer. Veuillez entrer votre nom. Maintenant, si je lance cela, nous allons voir s'
il vous plaît nom antérieur, mais il ne se
ferme pas immédiatement comme une donnée et d'autres situations ici
attendent en fait que nous
saisissons notre nom. Dans ce cas, j'ajouterai un Alex, et si j'appuie sur Entrée, il
imprimera Alex. Et c'est là que
le processus est terminé. Les textes verts seront ceux que j'ai saisis et le texte blanc
proviendra d'un programme Java lui-même. Maintenant, si je refais ça, j'ai ajouté mon nom complet. Par exemple, Alexander
Space Flores. Si je fais ça, on
ne voit plus qu'Alexander. C'est parce que la prochaine
fonction ici va compter chaque personnage
jusqu'à un certain espace. Donc, s'il y a un
espace, un onglet ou une nouvelle ligne et
que des choses de ce genre vont y arriver. Donc ça va juste arrêter de chercher nouveaux personnages et juste
retourner ce qu'il a trouvé jusqu'à présent. Si nous voulions
obtenir la ligne complète, nous pouvons dire la prochaine ligne. Comme pour les variables, cela
va utiliser la notation CamelCase, qui
signifie que nous
avons un n minuscule car il s'agit de la première
lettre du premier mot. Mais la première lettre
de tous les autres mots. Par exemple, L
va être en majuscules. Si je fais ça, je peux maintenant entrer
mon nom complet avec un espace, donc Alexander espace pour nous. Et si j'appuie sur Entrée, nous voyons que la chaîne complète nous a été
imprimée. Maintenant, nous n'avons
plus qu'à faire des cordes. Par exemple, je peux dire
s'il vous plaît entrer votre âge. Ensuite, je peux dire que int
age est égal au point d'entrée suivant. Et ici, nous voyons un tas
d'autres options. Dans ce cas, nous voulons le prochain int car c'est notre
type de variable, qui est un int. Ensuite, je peux utiliser S0 UT. Je pourrais imprimer l'âge
sans devis. Et si je fais ça, il
va nous demander notre âge. Dans ce cas, je vais entrer 28. Ensuite, il nous en imprimera 28.
7. Opérateurs arithmétiques: Souvent, lorsque nous avons des numéros, nous ne voulons pas simplement
les imprimer sur la console. Nous voudrions peut-être ajouter, soustraire, multiplier ou diviser
avec ces nombres. Par exemple, je peux dire que le nombre
entier est égal à 50. Allons de l'avant et
commençons par l'
imprimer sur la console. Nous pouvons toujours
voir ce qui se passe. Maintenant, je ne vais pas
faire ça parce que c'est très évident
ce qui se passerait. Mais supposons que nous voulions en
ajouter un à ce numéro. Quelques
façons différentes de le faire. Par exemple, le nombre
est égal au nombre plus un. Maintenant, si je fais ça, tu vas
probablement savoir
ce qui va être imprimé. Dans ce cas, il sera 51. Nous pouvons ajouter dix ou 100 ou
tout autre type de valeur. Ce que nous voulons pour cet intrus. Il existe maintenant un
moyen plus court de le faire. Je vais donc utiliser la barre oblique de
contrôle pour aller de l'avant et
commenter la ligne actuelle. Et puis je vais dire le
nombre plus égal à 100. C'est fondamentalement
la même chose que ce que nous avons ici, c'est juste un moyen plus court
d'ajouter un nombre à une variable. Donc, si je lance ça
, on verra 150 dans la console. Nous pouvons faire exactement le même concept lorsqu'il s'agit de soustraire. Au lieu de plus, j'ai moins. Et si je lance ça,
on verra 50 négatifs dans la console. Bien sûr, nous avons une
multiplication. Donc, si je lance ça, nous voyons
ici 5 000
et une division, qui a une barre oblique. Si je fais ça,
on verra 0. Maintenant, le 0 ici est parce que nous
utilisons des entiers qui
sont des nombres entiers. Si je devais changer
cet int par un double, qui permet des points décimaux,
et je devais exécuter cela. Nous voyons maintenant 0,5. Et bien sûr, tous
ces symboles peuvent être utilisés sur cette syntaxe d'origine. Par exemple, on peut dire
diviser le tout par 100 fois 100. Tout ce genre de choses
fonctionnera toujours. Maintenant, vous vous demandez peut-être
pourquoi quelqu'un qui utilise ce type de syntaxe s'il s'
agit d'une syntaxe plus courte ? La principale raison d'utiliser
ce type de syntaxe ici est que si vous
avez plusieurs variables, c'était la seule
façon de faire les choses. Par exemple, je peux dire que int
numéro deux est égal à dix. Ensuite, je peux dire que le nombre est égal
à deux fois 100. Nous ne pouvons pas le faire avec
ce type de syntaxe ici, car ce type de
syntaxe ne va
modifier que la variable mentionnée dans ce cas, c'est-à-dire
le nombre. Maintenant, je vais supprimer
la plupart des choses et je
vais créer un autre entier appelé
nombre égal à cinq. Supposons maintenant que nous
voulons ajouter ou soustraire une de cette variable
avec ce que nous venons de voir, nous pourrions faire un nombre
plus égal à un. Si je l'ai couru, bien sûr,
c'est une sorte de travail. Nous en verrions six dans la console. Mais augmenter et
diminuer un nombre par un est si courant que la plupart des langages de
programmation, y compris Java, ont
un moyen de le faire, une syntaxe encore plus courte. C'est ce qu'on appelle l'incrémentation
et la décrémentation d'une valeur. Je peux donc dire numéro plus, plus. Si je l'enregistre, nous en
verrons encore six dans la console. Cela va augmenter
le nombre d'un. Nous pourrions également faire le
nombre moins moins. Si je l'exécute, nous en
verrons quatre dans la console parce que nous
soustrayons du numéro
d'origine, qui est dans ce cas cinq. Maintenant, les avantages et les inconvénients peuvent continuer soit attribués
à la variable, et ils font des choses légèrement
différentes. Dans ce cas d'utilisation, si
je devais l'exécuter, nous
ne verrons aucun changement réel. Et nous allons toujours en
voir six dans la console. Mais c'est uniquement à cause de la
façon dont notre code est écrit ici. Avoir les avantages avant ou après sera beaucoup plus
clair sur la différence. Si j'ajoute les avantages directement
sur la variable ici, si j'exécute ce pinceau, il
y en aura encore six dans la console. C'est parce que les avantages
avant le nom de la variable, vont d'
abord incrémenter la
variable, puis l'utiliser. utilisant, dans ce
cas, nous le transmettons à la fonction de ligne d'impression, l'imprimant
essentiellement sur la console. Mais si je devais ajouter
des avantages par la suite, cela signifie
que nous allons d'
abord utiliser la variable
, puis l'augmenter. Si je devais exécuter
ça, on en verra cinq dans la console. Mais techniquement, dans la
mémoire de notre programme, nombre détient toujours la valeur six. Nous ne l'avons simplement pas imprimé. Pour le prouver, je peux l'
imprimer à nouveau. Consultez notre numéro d'impression. Et si je fais ça,
on en verra 56. Le même concept exact s'applique quand il s'agit de moins, moins. Si je vais courir ça,
on en verra cinq, puis quatre. Bien sûr, si je fais moins, moins avant, nous en
verrons 44. C'est parce que nous
diminuons d'abord le nombre, puis nous l'utilisons. Bien sûr, nous
imprimons à nouveau les résultats. Au fur et
à mesure que nous avançons vers le cours, vous verrez un certain nombre
de façons et d'
instances différentes où cela sera utile à utiliser. Surtout quand il
s'agit de notre premier projet, qui sera à
mi-chemin du cours.
8. Si vous le souhaitez: Nous sommes maintenant sur le point de nous plonger dans un concept très important
connu sous le nom de flux de contrôle. Le flux de contrôle est essentiellement l'
endroit où nous pouvons contrôler le flux du
programme qui aurait deviné. Et cela se fait le plus
souvent avec que l'on appelle des instructions IF. En gros, si quelque chose est
égal à quelque chose, nous allons exécuter
un certain code. Sinon, nous ne
pensons peut-être pas à un jeu de
tir préféré. Si vous appuyez sur le bouton Reload, il va vérifier si vous
avez une Magdalena complète. Pas si vous le faites
n'est pas rechargé. Mais si vous n'avez pas
de magazine complet, il sera alors rechargé. Commençons par
créer une entrée utilisateur, frappant créer un scanner. Je vais appeler cette entrée. Je vais attribuer la valeur du nouveau scanner
en système point n. Maintenant que nous avons accès
à cet objet d'entrée, nous pouvons lire les
entrées de l'utilisateur. Je vais donc dire int nombre
égal au point d'entrée suivant int. Maintenant, je vais simplement imprimer ça pour m'assurer que
tout fonctionne. Très bien, Mike, et exécutez
ça avec Shift et FTN. Ici, il s'attend à ce
que je saisisse un numéro. Je vais entrer 50
, puis on en retrouvera 50. Tout fonctionne bien. Mais au lieu de simplement
imprimer le numéro, je vais utiliser
une déclaration if. La syntaxe d'une instruction if
serait une parenthèse if, puis une accolade bouclée et une
accolade de fin sur la ligne suivante. Maintenant, à l'intérieur des parenthèses,
c'est là que va notre état. Et cette condition
va généralement comparer les deux. Merci. Par exemple, je peux
dire que le numéro deux est égal à des signes, 52 signes égaux est très important parce qu'
un seul signe égal, comme je l'ai déjà mentionné, est
un opérateur d'affectation. Cela va prendre la
valeur à droite
et l' attribuer à la
variable de gauche. Mais deux signes égaux
constituent une comparaison. Cela va voir si
la valeur à gauche, il appelle la valeur à droite. Je vais ajouter un commentaire
ici, il dit comparaison. Que se passe-t-il si ces
deux choses sont égales ? Eh bien, cela
deviendra essentiellement une expression booléenne. Et si vous vous souvenez auparavant, un booléen est égal à vrai
ou à faux, aucune autre valeur
de Boolean ne peut utiliser une instruction IF et
habit conditionnelle comme ceci va essentiellement
chercher un booléen. valeur. Hypothétiquement,
permettez-moi de
commenter cela et permettez-moi d'
entrer dans le numéro 50. Dans ce cas, notre éditeur de
texte
nous donne cet avertissement jaune
en le survolant. Il indique que le numéro de condition est
égal à 50 est toujours vrai. Maintenant, c'est évidemment
le cas parce que notre valeur ici est de 50
et cela ne change jamais. Maintenant, l'important ici
est que c'est toujours vrai, est-à-dire une valeur booléenne. C'est donc essentiellement la même
chose que de dire si c'est vrai. Maintenant, si c'est le cas
, le code à l'intérieur ces accolades
sera toujours exécuté. Si c'était faux et que le code à l'intérieur des accolades ne
sera jamais exécuté. La condition à
l'intérieur des parenthèses doit être une condition réelle. Je vais utiliser Control Z pour revenir en
arrière jusqu'à ce
que nous recevions réellement l'entrée de l'utilisateur. Et ici, je
vais simplement imprimer sur
la console en disant que
le nombre est 50. Maintenant, je vais me débarrasser de
certains de ces commentaires ici, juste pour rendre notre code
un peu plus propre. Je vais essayer de
nous diriger avec Shift et F2. Et ici, on s'attend à ce
que je saisisse un numéro. Si j'entre 50, je vais
dire les chiffres 50. Et si je refais ça, j'entre autre chose. Par exemple, 99. Il n'imprimera rien car cette condition est fausse. Par conséquent, le code
à l'intérieur ne sera pas exécuté. Mais que se passe-t-il si nous
voulions vérifier d'autres numéros ? Will, en théorie, on pourrait simplement ajouter un tas de déclarations si. Par exemple, un nombre
exactement égal à 51. Mais que se passe-t-il si nous ne voulons qu'
une seule chose
soit imprimée sur la console ? Maintenant, chaque fois que nous
créons une instruction if, cela va
créer quelque chose
appelé chaîne d'instructions if. Une chaîne de déclarations if. Cela va contenir
jusqu' à trois
types d'instructions différents. Nous avons nos déclarations si, nous avons nos déclarations elles-if, et nous avons nos déclarations
elles-mêmes. Jetons un coup d'œil à des déclarations d'
autres cas. Si je me débarrasse de cette déclaration
si ici, je pourrais dire autrement, si le nombre est exactement
égal à 51, je peux alors imprimer
le nombre est 51. Maintenant, une déclaration « Else-if » doit être directement après
une déclaration if. Celles-ci porteront essentiellement sur toutes les déclarations
précédentes si et
else-if. Et s'ils sont tous faux, alors il va
essayer de comparer
ces deux valeurs. Dans ce cas, la
déclaration IF en ligne 16, il va comparer le numéro 50. Si c'est vrai, nous
allons alors exécuter ce code. Et ensuite, nous allons
descendre jusqu'ici. Nous n'allons même pas essayer de comparer
le nombre de 251 car la déclaration else-if voit que l'
énoncé if était vrai. Il constate qu'il est inutile de vérifier les deux valeurs. Mais si nous avons entré un numéro
différent, par
exemple 51, cette
condition est désormais fausse. L'instruction else-if, nous verrons que nous allons ensuite essayer de
comparer ces deux valeurs. Dans ce cas, les deux
valeurs sont identiques. Donc ce code nous a couru,
mais si j'entre 52, rien ici ne sera rampe. Pour le prouver, je peux exécuter notre
programme. Je peux entrer 50. Ici, nous voyons les numéros
50, les étrangers le font à nouveau. Je peux entrer un 51, et
nous voyons ici le numéro 51. Enfin, je peux l'exécuter et
je peux entrer 52 et rien ne se passe. Maintenant,
pour chaque chaîne d'instructions IF , par exemple, ici, nous ne pouvons avoir qu'
une seule instruction if, mais autant de
déclarations autres que nous le voulons. Par exemple, je peux dire autrement que si le nombre est exactement
égal à 52, je pourrais alors
imprimer le numéro 52. Et pour rendre les choses un
peu plus intéressantes, je peux dire que le numéro f
est exactement égal à 52. Encore une fois, je n'ai pas pu imprimer test juste pour m'assurer que cette déclaration d'impression est très
différente des autres. Donc, si je l'exécute, j'
entre 52 dans la console. Nous voyons maintenant que le nombre
correspond aux deux, mais nous ne voyons pas de texte. C'est parce que cette
condition était vraie ici. Par conséquent, cette
déclaration ne
va même pas prendre la
peine de comparer ces deux valeurs et n'
imprimera certainement rien à l'
intérieur des accolades. Bien sûr, notre EDI
se plaint parce que ces deux choses
ne devraient pas être là. Cette déclaration
ici
ne sera jamais diffusée quoi qu'il en soit. Parce que si le numéro est 52, alors ce code
ici à la ligne 21, nous avons couru à la place, car notre condition en ligne
20 sera vraie. Je vais supprimer ça. Et la dernière chose que
je voulais
vous montrer , c'est l'autre déclaration. Cela doit se trouver à la
fin d'une chaîne de déclarations if. s'agit essentiellement
que d'un fourre-tout. Si rien d'autre dans la chaîne d'instructions
if était vrai, par exemple, je peux imprimer un
numéro inconnu et je peux exécuter cela. Et si j'entre dans le 5352, nous savons ce qui va se passer. Mais que se passe-t-il si j'entre 53 ? Il est dit
numéro inconnu parce que les trois déclarations si elles sont
juste ici ou fausses, donc l'
instruction else que nous avons exécutée. Mais si je devais lancer ça
et que je veux entrer 52, alors il est dit que le
numéro est pour les deux. Et l'instruction else
n'est pas exécutée car elle voit ou l'
une des précédentes déclarations f ou
else-if étaient vraies. Fondamentalement, le programme va passer en revue tous ces éléments et
essayer de trouver les
premières déclarations vraies et d'ignorer tout le reste.
9. Déclarations de commutation: Dans la dernière vidéo, nous avons
regardé les instructions if, mais ce n'est qu'un
exemple de flux de contrôle. Un autre exemple est
ce que l'
on appelle une instruction switch. Maintenant, c'est moins couramment
utilisé comme des instructions, mais vous le verrez
de temps en temps. Il est donc important de
comprendre comment cela fonctionne. Je peux simplement dire
changer de parenthèses ,
puis
accolades bouclées par la suite. Maintenant, les parenthèses
d'anticorps vont être une valeur, pas nécessairement une condition, mais n'importe quel type de valeur. Par exemple, dans
ce cas, un numéro. Maintenant, à l'intérieur, nous
allons
avoir quelque chose connu
sous le nom d'énoncés de cas, qui sont un peu
comme des déclarations si. Je peux dire le cas 50 avec un deux-points. Si j'appuie sur Entrée,
je pourrais ajouter le nombre 50. Ensuite, je dois ajouter quelque chose appelé
« break statement ». Je vais aller de l'avant et
faire ça avec Shift F2. Ici, je peux
entrer le numéro 50, c'est-à-dire
les chiffres 50. Maintenant, si je refais ça, j'entre autre chose.
Par exemple, 51. Rien ne
va réellement se passer parce qu'il est
évident que nous ne
gérons 51 nulle part. C'est
différent d'une déclaration if et elle avait ses propres cas d'utilisation. En fait, il est le plus
couramment utilisé pour mon expérience lors de la
comparaison de chaînes, mais vous pouvez l'utiliser au lieu des instructions if si nous le voulions
vraiment. Mais il y a d'autres choses à faire. Par exemple, je peux
ajouter dans d'autres cas. Donc, dans le cas 51, je peux ajouter. Le numéro est 51
et je peux casser. Maintenant, bien sûr, si
je lance ça et que j'ajoute 51, ça dira simplement ça. Mais que se passe-t-il si je veux vérifier deux numéros différents ? Eh bien, je peux aussi dire le cas de 52. Ensuite, la
déclaration imprimée indiquera que le numéro est 51 ou 52. Maintenant, si je cours ça, je peux
aller de l'avant et entrer en 52. Il est dit que le nombre est 51 ou 52. Bien sûr, nous obtiendrons
la même sortie si je saisis le numéro à un. Maintenant, la possibilité de vérifier deux valeurs
différentes avec une instruction
if
sera expliquée dans quelques vidéos du cours. Il est beaucoup plus facile d'expliquer
cela avec les instructions de commutateur. C'est pourquoi je le
couvre ici. Une chose à garder
à l'esprit, c'est
que si
l'un des cas est vrai, le code continuera à s'exécuter
jusqu'à ce qu'une
instruction break soit trouvée. Par exemple, je peux changer
cela par 52. Ensuite, je peux imprimer le
numéro 51 ici. Notez que nous n'avons pas de déclaration de rupture après cette déclaration
imprimée ici. C'est ici le
seul qui le brise quand nous avons quatre cent cinquante
un et cinquante deux. Donc, si je lance cela
et que j'hérite de 51, ce qui va se passer, c'
est qu'il continuera à exécuter le code jusqu'à ce qu'il
trouve une instruction break. Nous voyons que le chiffre est 51. Ça ne se soucie pas
qu'il y ait une affaire ici. Il va juste ignorer cela. Et il va courir
cette ligne ici, le numéro des deux, et
ensuite on va casser. Maintenant, une dernière chose
pour les instructions
switch sera la valeur par défaut, ce qui se passe
généralement à la toute fin. Et c'est un peu comme
l' autre énoncé
pour les déclarations if. Ici, je peux
imprimer un numéro inconnu. Et techniquement, vous n'avez pas
besoin d'une instruction break même si beaucoup
diront qu'il s'agit d'une syntaxe correcte. Mais le code fonctionne très bien même sans instruction break,
car bien sûr, la valeur par défaut devrait être
le dernier cas vérification dans
votre instruction switch. Si je vais de l'avant et que je lance ça
et que je saisis un autre numéro, par
exemple 500 négatif. Nous voyons ensuite un numéro inconnu. Les instructions Switch sont
assez simples et
peuvent être utilisées à la place des
instructions if et certains cas d'utilisation. Mais généralement, vous
allez simplement utiliser des instructions if.
10. Opérateurs de comparaison: Nous allons maintenant revenir
aux déclarations if et jeter un coup d'œil aux opérateurs de comparaison. Il s'agit de différentes façons de comparer deux valeurs. Auparavant, nous devions
regarder le signe double égal, qui ne ferait que
vérifier
la valeur à gauche et la comparer à
la valeur de droite. Mais il y a beaucoup d'autres
opérateurs que nous pouvons utiliser dans Java ou pratiquement
n'importe quel langage de programmation. Par exemple, nous avons
un signe plus grand que. Il y avait moins que le signe. Nous avons une valeur supérieure ou égale et
inférieure ou égale à. Et nous n'avons pas non plus d'égal à. Aujourd'hui, la plupart d'entre eux sont
très explicites. Mais jetons un coup d'œil
à quelques exemples. Comme je l'ai dit, si le nombre n'
est pas égal à 50, je peux alors imprimer
le numéro son pas 50. Et si je fais ça
et que j'entre 50, bien
sûr, on ne verra
rien parce que le
nombre est égal à 50. Par conséquent, cette condition
ici est fausse. Mais si je
refais ça et que je saisis autre
chose, par exemple,
on voit que le nombre
n'est pas 50 car bien sûr, un est la même chose que 50. Essayons maintenant d'autres choses. Par exemple, je peux dire que
le nombre est supérieur à 50. Je peux aussi que le nombre
est supérieur à 50. Et si je lance ça, je peux maintenant entrer le numéro que je
veux, par exemple 900. Et on dira que le
nombre est supérieur à 50. Mais si je saisis quelque chose de
moins ou d'égal à 50
, rien ne se passera. La partie égale est importante car 50 n'est pas
supérieure à 50. C'est égal à cela. Si j' entre 50 ans, rien ne
sera imprimé. Si je voulais cette fonctionnalité, je peux dire
plus ou égale à 50. Si je fais ça et que j'
entre 50, bien sûr, on va voir que le
nombre est supérieur à 50. Mais c'est simplement parce que je
n'ai pas mis à jour ce texte. Mais l'important
ici, c'est que le nombre est maintenant
supérieur ou égal à 50. Et bien sûr,
moins les opérateurs de panneaux fonctionneront exactement de la même manière. Je suis sûr que vous pouvez
imaginer comment cela
fonctionnera et nous pouvons les
utiliser pour avoir expressions
plus compliquées dans nos
déclarations if pour ensuite avoir programmes plus complexes et plus
significatifs.
11. Opérateur logique: Jetons un coup d'œil aux opérateurs
logiques. Voici d'autres moyens d'ajouter des contrôles
plus complexes
dans nos déclarations if. Par conséquent, quelques exemples de cela
seront l'opérateur NOT. Il s'agira également de l'opérateur AND
logique. Et l'opérateur OR logique, c'
est-à-dire en maintenant la touche Maj enfoncée et en appuyant sur la touche ci-dessus, entrez. L'opérateur NOT va simplement inverser une valeur. L'opérateur AND veillera
essentiellement à
ce que ce soit à gauche et à droite. L'opérateur or s'
assurera que cette chose à gauche ou à
droite, ou les deux sont vraies. Jetons un coup d'œil à toutes ces questions avec
des exemples. Je peux dire que si le nombre est
exactement égal à 50, nombre est exactement égal à 55, je peux alors imprimer 50 ou 55. Et si je fais ça,
je peux maintenant entrer 50 et on voit 50 ou 55
refaire ça, entrant 55, on voit
la même chose. Et bien sûr, si je lance ça
et que je saisis autre chose, par
exemple 70, nous ne
voyons rien dans la console. Fondamentalement, cela veut voir que le côté gauche
de l'opérateur
ou du côté droit, ou les deux sont vrais. Et cela peut être évident
car il s'agit de l'opérateur OR logique. Laissez-moi aller de l'avant et ajouter
ce qu'ils représentent. L'
opérateur OR logique va
être tel ou tel, l'un ou l'autre. Maintenant, l'opérateur AND aura trop de sens
dans ce cas d'utilisation, car la
variable numérique ne peut pas contenir un 5055 en même temps. Un meilleur exemple de
l'opérateur AND est l'utilisation
supérieure et inférieure à. Par exemple, je pourrais dire nombre est
supérieur ou égal à 50 et que le nombre est
inférieur ou égal à 55. Par conséquent, tous les éléments compris entre 50 et
55 ans devraient être inclus. Je vais changer
ça en 5255. Et si je fais ça,
je peux maintenant entrer 52. Et nous voyons que c'est vrai. Essentiellement si le nombre
est supérieur ou 50 et le nombre est inférieur ou 55 à la totalité de l'
instruction if sera vraie. Si l'une de ces deux
expressions est fausse
, l'instruction if
sera fausse. Par exemple, si je l'exécute encore
une fois et que j'entre 56, rien ne se passera
réellement. Bien que cette partie
soit vraie ici, car 56 est
supérieure ou égale à 50. C'est faux ici, car pour les six, il n'est pas
inférieur ou égal à 55. Et l'opérateur et nécessite à la fois une gauche et une
droite pour être vraies. Jetons maintenant un coup d'
œil à un opérateur NOT, qui va
simplement inverser une expression booléenne
avec des instructions if, nous pouvons en fait jumeler certaines
conditions ensemble. Par exemple, je peux enrouler parenthèses autour de tout
ça. Et si je devais gérer ça,
la même chose se produirait. Mais maintenant, nous pouvons utiliser un
opérateur NOT ou au préalable. Cette expression entière
sera soit vraie, soit fausse, selon que la valeur de nombre est l'opérateur NOT qui
va simplement inverser cela. Je vais donc dire que non 5255. Si je fais ça, je
pourrais entrer 52. Il ne se passe rien. Mais si je
refais ça et que j'entre quelque chose qui
ne se situe pas entre 5055, par
exemple, tous les 34,
nous ne voyons pas 5255. L'opérateur NOT va simplement inverser une expression
booléenne. Et tout au long du
cours, nous
verrons plus de cas d'
utilisation l'opérateur non et des deux
autres opérateurs. Et à quel point ils peuvent être utiles.
12. Pendant que les boucles: Nous allons maintenant
examiner l'exemple le plus simple de boucle. Et c'est un moyen de faire en sorte que
certains morceaux de code continuent à s'exécuter encore et encore tant que nous
voulons qu'ils s'exécutent. Il existe donc
différents types de boucles. Mais dans cette vidéo,
nous allons jeter un coup d'œil à la boucle While. On peut donc dire que pendant les parenthèses
et ensuite les accolades bouclées. Et dans cette condition, il y aura une expression
booléenne. Cela
sera vrai ou faux si cette boucle
doit continuer à s'exécuter. Par exemple, je peux
créer un entier appelé compteur et le
définir égal à 0. Je pourrais alors dire que pendant que le
compteur est inférieur à dix, je peux ensuite passer à l'intérieur de la boucle while et
tout ce qui se trouve à
l'intérieur des accolades bouclées sera exécuté
tant que cette condition est vraie
ici. Actuellement, cela
serait connu sous le nom de boucle infinie car le
compteur ne change jamais. C'est toujours 0. Donc, le
contre-levage et l'étain sont toujours vrais. Nous voulons nous assurer
que nous avons réellement changé l'état du compteur, où il est possible d'être dix ou
plus. De cette façon, nous ne sommes pas toujours
coincés dans un sommeil. Fais ça. Je vais d'abord
imprimer ce qu'est le comptoir. Je dis « compteur, espace côlon ». Et puis, en dehors de la corde, je pourrais faire plus compteur. Cela ajoutera le contenu de la variable de compteur à la chaîne globale
transmise à la fonction de ligne
d'impression. Maintenant, après, je peux
dire « counter plus ». Ou si je le voulais vraiment, je pourrais mettre ça ici. Comme nous l'avons déjà appris,
placer le plus, plus à gauche du nom de
la variable augmentera d'
abord,
puis vous l'utiliserez. En utilisant, dans ce cas, nous
l'imprimons sur la console. Avant de courir ça,
passons en revue ce que je viens de faire. J'ai créé une
variable entière avec une valeur de 0. Et nous disons que si cette
variable est inférieure à dix, nous allons exécuter tout le code à l'intérieur de ces accolades. Maintenant, ce code imprime
simplement le comptoir. Mais avant
d'imprimer le comptoir, nous allons l'
augmenter d'un. Cela signifie que notre
boucle n'est plus infinie parce qu'elle s'exécute pour la
première fois, elle imprimera une, puis deux, puis trois, et ainsi de suite
jusqu'à ce qu'elle atteigne dix, où le compteur inférieur à l'étain ne
serait plus vrai. Nous pouvons donc sortir de notre boucle et continuer avec
le reste de notre programme. Voyons cela en
action. Je peux faire Shift F2. Il devrait exécuter notre programme. Et si j'agrandis cette fenêtre, nous voyons maintenant le compteur 1
jusqu'à dix heures. C'est un
exemple très simple de boucle. En gros, bien que cela soit vrai, nous allons exécuter tout le code à l'intérieur des accolades.
13. Faire en sorte que les boucles: Jetons maintenant un coup d'œil
à la boucle Do While. Cette boucle est similaire à
la boucle while, mais elle est légèrement
moins utilisée. La syntaxe avec nous sera
due, puis des accolades. Et puis, à la fin de l'
accolade, on
dirait avec nos parenthèses
et un point-virgule. Maintenant, la condition va être mise à l'intérieur ici. En gros, le concept
ici est que nous allons
exécuter ce bloc de code
immédiatement, quoi qu'il en soit. Ensuite, il va
simplement devenir
une boucle normale de while. Nous allons continuer
à exécuter ce bloc de code tant que cette
condition est vraie. Mais quel que soit le bloc de code que nous avons exécuté au moins une fois, c'est différent
d'une boucle while, où ce code de crochet de bloc
n'est exécuté que la première fois, seulement si la condition est vraie. Maintenant, un
cas d'utilisation pratique consiste à recevoir les commentaires de l'utilisateur et s'
assurer que nous obtenons
le type
d'entrée correct ou un nombre correct. Par exemple, je peux dire que l'
entrée du scanner est égale à un nouveau scanner. Je peux passer dans le système point n. et ensuite je
vais dire int number. Je ne vais pas lui
attribuer de valeur. Et c'est quelque chose que nous
pouvons faire avec des variables. Nous pouvons les créer, mais vous n'avez pas besoin de leur attribuer
une valeur immédiatement. Maintenant, à l'intérieur
du bloc de code do ici, je vais dire que le nombre
est égal au point d'entrée suivant int. Je vais dire alors que le
nombre est inférieur à dix. Donc, ce que ce
code va faire, c'est que
nous allons d'abord recevoir
des commentaires de l'utilisateur. Nous allons créer un numéro que nous utiliserons
plus tard. Ensuite, nous allons
exécuter ce code. Quelle que soit la condition
de
marche , elle court toujours une fois. Nous
allons donc essentiellement recevoir des commentaires de l'utilisateur,
idéalement un chiffre. Et ensuite, nous allons continuer
à l'exécuter tant que cette
condition est vraie ici. Par conséquent, nous devons fournir
un nombre de dix ou plus pour qu'il puisse
réellement recevoir une entrée valide. Maintenant, après, je
vais imprimer le numéro. Je vais faire ça
avec Shift et FTN. À l'intérieur d'ici, je peux
entrer ce que je veux. Par exemple, cinq ou sept. Tout ce qui est inférieur à dix sera complètement ignoré car
la boucle while
continuera de faire
fonctionner ce
bloc de code ici encore et encore jusqu'à
ce que cette condition soit fausse. Je peux même entrer 5 000
négatifs, par
exemple, et ça
va continuer à fonctionner. Mais dès que j'entrerai quelque chose dix ou plus, par exemple 84, il va
sortir de cette boucle, et il va
imprimer 84 ici.
14. Pour les boucles: Jetons un coup d'œil à
la boucle la plus puissante
, connue sous le nom de for-loop. C'est le meilleur moyen
de compter les choses ou de parcourir une liste
de certains éléments. Cela peut sembler déroutant, mais au cours du cours, vous en
verrez des exemples. Pour l'instant,
essayons simplement de compter quelque chose. Dans l'exemple précédent, j'ai
créé un compteur,
puis il a utilisé une boucle while pour aller de l'avant et compter là-dessus. Nous pouvons utiliser une boucle for-loop pour y parvenir et d'une manière
beaucoup plus propre. Par exemple, je peux dire pour des
parenthèses, des accolades bouclées. Et à l'intérieur des parenthèses,
il y aura trois
éléments différents qui seront séparés
par des points-virgules. Le premier
sera l'initialisation. C'est ici que nous
pouvons créer des variables qui peuvent être
utilisées avec notre boucle. Je peux donc dire que le
compteur int est égal à 0. La seconde va
être une condition
semblable à une boucle de temps
ou d'une boucle à faire. Ce sera le cas si la boucle
doit continuer à s'exécuter. Dans ce cas, je vais
dire contre moins de dix. Ensuite, cette dernière section sera du code que nous avons exécuté chaque fois que
la boucle sera terminée. Dans ce cas, nous voulons
dire plus compteur. Donc, à chaque fois, nous allons
augmenter le compteur d'un. Maintenant, ici, je
vais simplement imprimer le comptoir
sur la console. Et si je fais ça
avec Shift et F2, nous devrions voir un nombre
de 0 à neuf, comme nous le voyons ici. Toujours dans la boucle. Tout d'abord, il ne crée cette
variable qu'une seule fois. Ensuite, si cette
condition est vraie, si
c'est le cas, elle n'exécute pas tout le code à l'
intérieur de nos accolades bouclées ici, il
suffit d'imprimer 0 sur la
console comme nous le voyons. Puis, une fois qu'il arrive à la fin, il se rend compte qu'il n'y a
plus rien à faire. Il va donc reculer en boucle. Comme il le fait, il
augmente le compteur ici. Cette gnose, ce compteur
est maintenant de 11 ans, c'est moins de dix. Si mignon de répéter le processus jusqu'à ce que cette condition soit fausse, que nous voyons ici. Parce qu'une fois qu'il a neuf ans
et qu'il passe à dix, la condition n'est plus vraie. Par conséquent, nous
sortons de la boucle.
15. Briser et continuer: Jetons un coup d'
œil aux mots clés break et continue avec comment regarder
les instructions break in switch. Et cela fonctionne de la
même manière ici. Mais ce sont deux
mots-clés qui peuvent être utilisés dans n'importe quel type
de boucle. Par exemple, je peux dire que le compteur
int est égal à 0, alors que le compteur est inférieur à dix. Maintenant, ici, je
vais d'abord augmenter compteur, puis je vais
l'imprimer sur la console. Mais disons que j'
ai sauté le numéro cinq après l'avoir augmenté. Mais avant d'imprimer sur la
console, comme je l'ai dit, si le compteur est exactement
égal à cinq, je peux maintenant
continuer et continuer ou
simplement sauter tout le reste en boucle et
revenir au début de La boucle. Il vérifiera toujours
l'état. Mais tout ce qui a passé cette déclaration
continue ici, eh
bien, être ignoré dans ce
cas n'est que cette ligne ici. Essentiellement, une fois que
nous aurons atteint cela, nous allons simplement
revenir
au début et ils continuent à
boucler normalement à partir de là, je vais appuyer sur Maj
et F2 pour exécuter le code. Et ici, nous en voyons un à dix, mais il en manque cinq. Nous en voyons 46 immédiatement
après. C'est le mot clé continue. Il
reviendra automatiquement au début de la boucle. Jetons maintenant un coup d'
œil au mot-clé break. Certains d'entre vous devinent peut-être déjà
ce que cela va faire. Essentiellement, au lieu
de simplement revenir au début, s'il va se
détacher complètement de la boucle. Si je lance cela, nous voyons un à quatre car
une fois que cinq sont atteints, il va immédiatement
casser et commencer exécuter le code en dehors
de la boucle while. Vous pouvez utiliser ces deux
mots-clés pour mieux contrôler vos boucles, ce qui est exécuté et quand
en sortir. Et ces deux mots-clés
fonctionnent ici sur chaque boucle de Java, y compris les trois
types que nous avons vus jusqu'ici.
16. Projet de calcul: Mettons toutes les compétences que
nous avons acquises jusqu'ici aux États-Unis. Faisons notre tout
premier projet. Nous allons juste être
une simple calculatrice. Maintenant, la plupart des choses que
vous avez apprises jusqu'à présent
seront directement appliquées
dans ce projet. Ce que ce projet est
conçu pour être encore difficile si vous êtes tout nouveau dans la programmation lorsque vous avez
commencé ce cours. Si vous rencontrez des problèmes
ou que vous êtes aux prises avec ce projet
attendu et ne vous inquiétez pas, il y a trois choses principales que je voulais faire quand il
s'agit de cette vidéo. Le premier va
revoir un plan. Lorsque vous concevez n'importe quel programme, même une simple calculatrice, il est important d'
avoir un plan et une idée globale de
ce que vous voulez
faire avant de commencer à
écrire du code. La deuxième chose, c'est que je veux que
vous essayiez vous-même. Je vais donc
vous montrer étape par étape comment je ferais de nous. Mais avant de le faire,
je veux que vous mettiez en pause
cette vidéo et que vous essayiez de la
réaliser vous-même
après avoir revu un plan. Bien que des cours comme
celui-ci vous aident, le meilleur moyen de mieux
programmer est le bon code. Je vous encourage vivement à
aller le plus loin
possible par
vous-même avant de regarder comment je mettrais cela
en œuvre. Maintenant, la troisième chose
va être, je vais vous montrer comment
j'ai créé ce programme. Après avoir conçu
notre plan ensemble et après avoir essayé de le
faire vous-même, je vais vous montrer comment
je ferais ce programme. Commençons par la première étape, passant par un plan. Que doit faire ce projet ? Et que devons-nous faire
pour y parvenir ? La première chose, c'est qu'il
faut demander deux chiffres. Ensuite, il devrait demander, ou une opération mathématique. Il s'agira d'une multiplication
ou d'une division plus, moins. Ce serait donc l'un de
ces quatre personnages. Ensuite, nous devons afficher
le résultat, puis
revenir au début
du programme où
nous demandons des chiffres. Il s'agit d'un
plan très, très basique lorsqu'il
s'agit de ce projet. Certaines de ces choses
devraient être simples. D'autres choses
exigeront que vous réfléchissiez, peut-être même en revenant
aux leçons précédentes. Encore une fois, essayez de mettre
cette vidéo en pause
maintenant et d'aller
aussi loin que possible vous-même, puis
revenez une fois que vous avez terminé un projet ou une fois que vous bloqué à
100% et que vous ne
pouvez plus aller plus loin. Et je vais vous montrer étape par étape comment je ferais ce programme. J'espère que vous avez déjà
essayé vous-même. Maintenant, allons de l'avant et mettons en œuvre chacune
de ces étapes. Mais notre plan ici montre une utilité importante de lire
toutes les instructions. Par exemple, nous voyons ici que nous allons revenir au
début du programme. Cela signifie que tout
ce programme pourrait se trouver dans une boucle while. Je peux dire que c'est vrai. Maintenant, il s'agira d'une
boucle infinie qui fonctionnera à jamais, qui convient à ce cas d'utilisation. Maintenant, il va dire qu'il
devrait demander deux numéros. Je vais donc
commencer par faire un scanner appelant des entrées, ce qui
est égal à un nouveau scanner passant
dans le point n système. Ensuite, je vais imprimer
entrer le premier numéro. Ensuite, je vais dire int numéro un est égal au point d'entrée suivant int. Jusqu'à présent, nous avons
demandé un numéro. Faisons
exactement la même chose pour
le deuxième numéro. Je viens d'imprimer, entrez
le deuxième numéro. Et puis nous allons
avoir un autre entier, int nombre deux est égal au point
d'entrée suivant int. Jusqu'à présent, le tout
premier pas est fait. Nous avons maintenant les deux chiffres. Maintenant, nous devrions faire
une opération de mathématiques. Ainsi, plus moins étoile ou quatre
barres obliques seront l'addition, soustraction, la multiplication
ou la division. Ensuite, disons à l'
utilisateur ce qu'il faut faire. Je peux dire entrer dans une opération. Ensuite, nous allons dire
quelles sont les options qui existent. Plus, moins étoile et barre oblique. Comme je l'ai dit, String
Operation correspond au point d'entrée suivant. Nous avons donc maintenant accès
aux chiffres et à
l'opération que nous voulons. Maintenant, utiliser
les instructions if pour comparer deux chaînes ne fonctionne pas correctement avec tout ce que
je vous ai appris jusqu'à présent. Cela dit, nous
allons utiliser des instructions de
commutateur ici. Je peux dire le fonctionnement de l'interrupteur. Je pourrais alors dire
cas avec un plus. Je vais ajouter une pause
et ensuite je vais
dire cas moins pause. Je vais juste y aller et
ajouter ces quatre. Nous avons case, étoile, break, case,
slash break avant. Maintenant, pour obtenir un
résultat dans tous ces éléments, je dois le créer en dehors
de cette orthèse bouclée. Les détails de cette situation seront expliqués
dans une prochaine vidéo. Je vais donc créer un
entier appelé résultats. Je n'attribuerai pas encore de valeur. Nous allons le faire à l'intérieur
de notre déclaration de commutateur. Donc, s'ils ont inscrit un plus, je vais dire que
les résultats correspondent au numéro un
plus numéro deux. Assurez-vous également d'épeler
un certain nombre de correctement. Ensuite, à partir de moins, je vais
dire que le résultat est numéro un moins le numéro deux. Pour la multiplication, je
peux dire que le résultat est égal numéro un fois le numéro deux. Et puis, pour la division, je
peux dire que le résultat est égal numéro un divisé
par le numéro deux. Maintenant, en dehors de l'instruction
switch, je peux ensuite imprimer le résultat, comme je l'ai dit, l'espace de résultats. Et je peux ajouter les
résultats ici. Maintenant, nous
obtenons une erreur et notre EDI en survolant cela,
cela indique que les résultats variables
n'ont peut-être pas été initialisés. Nous pouvons aller de l'avant et cliquer
sur Initialiser une variable. Il va simplement
attribuer 0 ici. Même si nous allons
remplacer cette valeur, il est toujours bon de voir que nous allons
avoir une valeur par défaut car il ne
sait pas avec certitude si l'
un de ces quatre
cas sera exécuté. Allons de l'avant et lançons ça
et voyons ce qui se passe. Si j'appuie sur Maj et F2, il va dire entrer
le premier numéro. Je vais entrer cinq,
entrer le deuxième numéro, trois et tourner l'opération. Je vais entrer dans
la multiplication. Le résultat est 15, et maintenant il revient sur
le premier chiffre. Par exemple, je pourrais faire
105, puis soustraire. Et ici, on en a cinq. Il va donc continuer à
boucler encore et
encore et continuer à demander
le premier deuxième numéro. Et nous pouvons ensuite faire n'importe quel type d' opération que nous voulons
avec ces chiffres. Gardez maintenant à l'esprit que
nous utilisons des entiers ici. Donc, si vous essayez de voir, cela ne vous donnera qu'un
grand nombre de résultats. Si vous souhaitez obtenir des résultats plus
précis,
vous pouvez utiliser le double et au lieu
d'un vous pouvez utiliser le double et au lieu entier pour la variable de
résultat. Maintenant, si vous pouvez
le mettre seul
, félicitations
et bon travail. Mais s'il avait besoin
de regarder une partie de la vidéo supplémentaire pour le
faire, ne vous inquiétez pas,
c'est parfaitement
bien, surtout
si vous êtes nouveau dans c'est parfaitement
bien, surtout la programmation, parce que c'est une
toute nouvelle compétence. Au fur et à mesure qu'il passe
à travers le cours, plus de choses deviennent plus apparentes pour vous et plus faciles pour vous. Il faut juste du temps pour
apprendre toutes ces choses.
17. Méthodes: C'est là
que les choses commencent à devenir un peu plus compliquées
mais aussi plus amusantes. La rubrique suivante
porte sur les méthodes. Les méthodes ne sont essentiellement
qu'
un bloc de code exécuté et leur objectif est
de faire une chose spécifique. En fait, nous avons travaillé depuis tout le temps
dans un méthodiste. Cette méthode
principale est exécutée par défaut chaque fois que nous
exécutons notre propre programme. Mais nous pouvons créer
nos propres méthodes en dehors des accolades bouclées
pour la fonction principale, je peux dire publique, statique, vide, exemple, parenthèses,
puis accolades bouclées. Et ici, nous pouvons écrire le code
que vous voulez. Par exemple, je peux
simplement imprimer Hello World. Ensuite, dans notre méthode principale, je peux dire l'exemple. Et il
saura automatiquement que nous
essayons d'exécuter cette fonction. Si j'appuie sur Maj et F2, il devrait exécuter notre programme. Et ici, nous voyons HelloWorld
dans la console. se passe donc beaucoup de choses ici. Et j'ai également
mentionné des méthodes, et il a également
mentionné des fonctions. Et les fonctions sont
pratiquement la même chose, bien qu'il y ait une
légère différence. La fonction est essentiellement
ce que nous voyons ici. C'est techniquement une
fonction, tout comme cela. Mais chaque fois qu'une fonction
se trouve à l'intérieur d'une classe, ce que je vais expliquer
dans une prochaine vidéo. Ces méthodes sont maintenant appelées méthodes, mais dans la plupart des cas,
cela n'aura pas d'importance. Ils sont
pour la plupart interchangeables. Mais techniquement, une fonction est en dehors d'une classe et
une méthode est à l'intérieur. Encore une fois, nous couvrirons les cours plus
en détail à
l'avenir pour l'instant, considérez-les
simplement
comme un conteneur dans lequel toutes vos
méthodes pourront s'asseoir. L'ajout de ces
parenthèses ici
invoquera , exécutera ou
déclenche cette fonction. Ce sont tous des termes
interchangeables essentiellement
pour exécuter la fonction. Ce sont également des
terminologies courantes qui sont utilisées lorsque nous
essayons d'exécuter une fonction. Maintenant, vous vous
demandez peut-être pourquoi on a appelé la méthode d'exemple
alors que nous pouvons simplement imprimer Hello World
dans la méthode principale. C'est parce que
c'est évidemment un exemple trop simplifié. Dans un vrai programme, vous ne voudrez peut-être pas utiliser
cet exemple de fonction une seule fois. Vous pouvez utiliser
cet exemple de fonction plusieurs fois
tout au long de votre classe ou avoir été tout au long de
votre projet. La possibilité d'
abréger certains éléments
de fonctionnalité dans leurs propres méthodes facilite grandement la réutilisation de
cette fonctionnalité. Nous verrons cela dans de vrais exemples fur et
à mesure que nous avancerons dans le cours. Mais maintenant, expliquons
ce que
sont ces parenthèses et aussi ce que ce
vide signifie ici. Fondamentalement, une fonction peut recevoir des
entrées et elle peut
également renvoyer une entrée. Je vais me débarrasser
de ces commentaires. Et si je clique sur
le nom de l'exemple et que j'appuie sur Maj et F6, je peux maintenant refactionner ou renommer toute
cette fonction. Je peux dire ajouter. Maintenant, si j'appuie sur Entrée, il renomme la fonction ainsi que
l'invocation de la fonction. Maintenant, à l'intérieur des parenthèses, on peut ajouter quelque chose
connu sous le nom de paramètres. Par exemple, je peux dire
int num one et int num2. Ils sont séparés par une virgule. Nous pouvons même avoir plusieurs
types de variables. Par exemple, un exemple de chaîne. Mais dans ce cas, nous ne faisons
qu'ajouter deux chiffres. Il n'est donc pas nécessaire d'
avoir une ficelle ici. Maintenant, automatiquement
intelligent
nous donne cette flèche rouge ici, disant que nous ne pouvons pas l'appeler
sans aucun paramètre. Nous pouvons donc transmettre
des informations ici, par exemple 510, et maintenant nous n'
avons plus d'erreurs, mais ce code ne
fonctionne pas comme prévu. C'est parce que nous ne faisons que simplement imprimer Hello World. Mais ce que nous voulions
faire, c'est que nous voulons renvoyer la somme entre
num1 et num2. Je peux dire retour num1 plus num2. Maintenant, cela nous donne une erreur ici. Si je le survole,
il est dit que je ne peux pas renvoyer une valeur d'une méthode
avec un type de résultat vide. Cela évite ici, ce qui signifie que rien ne sera rendu. Nous devons être très
clairs sur le type de données qui seront
renvoyées par chaque fonction. Dans ce cas, nous
retournons un entier parce que nous ajoutons
pour être introduits ensemble. Nous pourrions donc changer un vide en
int et l'erreur disparaît. Maintenant, ici, je peux dire
int sum égal à 510, et je peux en imprimer quelques-uns. Maintenant, si je l'exécute
avec Shift F dix, cela imprimera la 15e
sur la console. Maintenant, si nous le voulions, nous pourrions également passer cet appel de fonction à l'intérieur
de la fonction de ligne d'impression. Et en fait, la ligne d'impression a été sa propre fonction intégrée que nous utilisons depuis tout
ce temps. Il a ses propres parenthèses
et nous lui transmettons des informations comme nous le sommes avec cette fonction d'ajout. Et voici un exemple parfait des raisons pour lesquelles nous voulons créer des fonctions. Parce que je peux copier et coller
ça quelques fois. Et je peux maintenant ajouter différentes
valeurs que je voulais. Cela nous donne maintenant trois résultats
différents de 1520 et trois résultats négatifs. Et c'est parce que nous avons une
fonction d'ajout simple ici. Il s'agit évidemment d'une fonction
très simple. Mais si nous avions des fonctions plus
compliquées avec plus de code à l'intérieur,
vous pouvez voir les avantages de ne
devoir
écrire le code qu'une seule fois ,
puis un fonctionnement à partir de différents endroits comme plusieurs
fois que vous le souhaitez. Une dernière remarque
est que ces sont techniquement
appelés paramètres, mais lorsqu'ils sont transmis
, par exemple ici, ou ces nombres directement, sont appelés arguments. Vous disposez de paramètres
et d'arguments. Tout comme les fonctions ou les méthodes, elles sont souvent utilisées de manière
interchangeable, mais techniquement,
ce que vous écrivez dans la fonction elle-même est
connu sous le nom de paramètres. Et ce que vous transmettez dans la fonction est
connu sous le nom d'arguments. Mais encore une fois, tout comme
les fonctions par rapport aux méthodes, elles sont souvent utilisées de manière
interchangeable.
18. Surchargement de méthode: Dans la
vidéo précédente, nous avons créé une fonction d'ajout simple qui renvoie la somme
entre deux nombres. Mais que se passe-t-il si nous
voulons ajouter des chaînes ensemble pour créer une phrase ? Par exemple, je peux
imprimer ajouter bonjour et monde. Et évidemment, cela ne fonctionne pas. Mais bien sûr, je pourrais imprimer l' ajout 55 et cela fonctionnerait. En règle générale, vous ne pouvez
avoir qu'une seule méthode
portant le même nom, similaire aux variables,
mais nous pouvons faire quelque chose appelé surcharge de méthode. Cela signifie essentiellement avoir plusieurs méthodes
portant le même nom, mais des paramètres différents
et des types de retour différents. Par exemple, je peux dire chaîne
statique publique avec une majuscule S, String s1 et S2. Maintenant, ici, je peux retourner
s1 plus un espace plus S2. Fondamentalement, on réunit les
deux mots. Nous avons maintenant deux méthodes
portant le même nom, mais nous les avons surchargées
où Java va maintenant savoir laquelle appeler en fonction des
paramètres transmis. En ligne, cinq sont des
passes et des cordes. Alors, comment
va-t-on appeler une méthode ici ? Les lignes correspondent à la
transmission d'un nombre entier. Comment va-t-on appeler
la méthode ici ? Je peux aller de l'avant et faire fonctionner
cet étui à la sortie. Ici, nous voyons HelloWorld et dix. La surcharge de méthode est souvent utile dans des situations comme celle-ci, où vous avez
des fonctionnalités similaires, mais vous souhaitez transmettre
différents types de variables. Vous pouvez surcharger ces méthodes, les contournant et en ayant différents paramètres et éventuellement un
type de retour différent si cela vous semble logique.
19. Portée: Chaque fois que nous créons une orthèse
ouvrante bouclée, comme celle-ci ici, c'est créer quelque chose
connu sous le nom de lunette. Et la portée
va limiter ce qui peut ou ne peut pas utiliser
certaines variables. Par exemple, je peux dire que le compteur
int est égal à 0. Et puis je vais
créer une boucle while pour incrémenter ce compteur. Alors que le compteur est inférieur à dix. Je peux alors dire «
Counter plus plus ». Maintenant, nous pouvons accéder comme
comptoir parfaitement, donc je peux l'imprimer ici et tout fonctionne comme prévu. Mais que se passe-t-il si je crée
une deuxième variable à l'intérieur ? Par exemple, je dis que l'
exemple int est égal à 15. Et je devais imprimer ça pour
quelque raison que ce soit. De toute évidence, cela n'a pas
trop de sens, mais ce n'est qu'un exemple. Tout fonctionne jusqu'à présent. Mais que se passe-t-il si
j'essaie d'accéder à un exemple en dehors de
la portée de la boucle while ? Je pourrais donc essayer de l'
imprimer. Je peux ajouter un exemple et
nous obtenons une erreur ici. Si je survole cela, il est dit que je ne peux pas résoudre exemple de
symbole et il y a
même une solution ici. Ou je peux cliquer pour amener l'exemple int dans
la portée actuelle. Notez que cet exemple est créé
en ligne 14 ici. Mais si je clique
sur la solution, nous créons maintenant la
variable sur la ligne neuf, qui se trouve dans la zone
principale de la fonction. Cela signifie que tout à
l'intérieur de la fonction principale peut l'utiliser, y compris la portée de la
boucle while, car je suis également à l'intérieur
de la fonction principale. Il a donc changé notre
code pour simplement réaffecter l'exemple
avec la valeur de 15. Mais nous le créons en
dehors de la boucle While. Maintenant, même si tout cela est dit, n'est pas une bonne
idée de simplement placer
aveuglément toutes vos variables au
sommet de votre fonction. Par exemple,
supposons que je n'
imprime pas cette
variable ici à la ligne 20. Dans ce cas, la variable d'
exemple
n'a pas besoin d'être définie
dans la portée principale. Au lieu de cela, il pourrait être
simplement défini dans la portée de la boucle
while. Je pourrais dire un exemple. Et puis je peux me débarrasser de la
création de variables ici. En règle générale, à moins d'
avoir une bonne raison de le faire, vous devez toujours
définir vos variables aussi localement que possible. Par là, je veux dire, ici même, c'est le plus possible localement parce que nous utilisons
la variable en ligne 16. Il va donc vers votre local
jusqu'à la portée ici. Il n'est pas nécessaire de le définir en
dehors de la portée principale, car pour l'instant,
avec ce code, nous n'utilisons pas du tout un anti,
la portée principale. Nous l'utilisons simplement à l'intérieur de
la portée de la boucle while.
20. Opérateur ternaire: Parfois, vous
voudrez peut-être écrire une instruction if, mais de manière plus condensée, c'est souvent le
cas lorsque vous souhaitez avoir une seule
valeur ou que vous
attribuez à une variable en fonction d'un vrai
ou faux énoncé, nous pouvons réaliser que
c'était quelque chose connu sous le nom d'opérateur ternaire. Il s'agira essentiellement
d'un type de
condition
suivi d' un point d'interrogation, puis d'une valeur vraie, deux-points, puis d'une fausse valeur. Cela peut sembler déroutant. Jetons un coup d'œil
à un vrai exemple. Je vais créer
un booléen appelé est membre jusqu'à ce que
cela soit égal à vrai. Cela peut être que si vous
payez pour un abonnement quelque part et qu'ils proposent
un paiement unique, ils peuvent vous accorder une
réduction sur cet achat. Par exemple, ici, je peux dire que int price égal est membre. Encore une fois, c'
est notre condition. Une condition n'est qu'une expression
booléenne. Donc, une simple instruction booléenne
fonctionnera très bien. Donc, un point d'interrogation, et ensuite
nous avons notre vraie valeur. Dans ce cas, le
prix peut être de 10$. Mais ce que l'on dit que
nous voulons imposer un prix plus élevé aux personnes
qui ne sont pas déjà membres. Je peux donc ajouter n'importe quel deux-points et
le prix ici pourrait être de 40$. Maintenant, je peux aller de l'avant et
imprimer le prix ici. Et je peux le faire
avec Shift et FTN. Ici, nous en voyons dix dans la console. Mais si je change de membre
en faux et que je lance ça, nous
verrons alors 40 dans la console. La raison en est maintenant que
cette condition est fausse. Alors, qu'est-ce qui va utiliser ce code ici qui était
partiellement fausse, n'importe quoi après le deux-points
sera utilisé. Si la condition est fausse, tout ce
qui précède le deux-points sera utilisé si c'est vrai. Maintenant, il est évident que nous pourrions faire
quelque chose de similaire. Si je dis que le prix int est égal à 0, alors je peux dire si c'est le cas, rappelez-vous, je peux maintenant
dire que le prix est égal à dix, sinon le prix est égal à 40. Et cela fonctionnera exactement de
la même manière. Mais un opérateur ternaire
brille vraiment ici chaque fois que
vous utilisez instructions si simples où vous voulez que cela se trouve sur
une seule ligne de code. Parce que l'
écriture de cette ligne de
code est évidemment beaucoup plus facile que d'
écrire toutes ces lignes.
21. Tableaux: Parlons maintenant des tableaux, qui ne sont essentiellement qu'un
ensemble de variables. Par exemple, supposons que j'ai un certain nombre de résultats différents
aux tests d'étudiants. Je peux dire que int étudiant
un est égal à 96, int étudiant deux égal à 49, étudiant trois est égal à 76, et ainsi de suite. À moins
d'en avoir un tas,
je ne veux pas nécessairement
créer un tas de variables
différentes. Au lieu de cela, je peux créer une variable
appelée tableau. Il s'agira
essentiellement d'une collection ou d'une liste de variables
différentes. Je dois d'abord spécifier la variable que
le tableau va contenir. Chaque baie ne peut contenir
qu'un seul type. Vous ne pouvez pas les mélanger et les associer. Par exemple, vous ne pouvez pas
avoir d'entier avec une chaîne qui doit tous
être du même type exact. Je peux donc dire int, ouvrir et fermer des
crochets. Cela représente un tableau. Je ne pourrais pas dire que les scores des étudiants sont
égaux à une nouvelle largeur int, les crochets également. Cela va
créer notre propre tableau. Mais chaque fois que nous créons un
tableau sans valeurs initiales, ce que je vais vous montrer ici dans un instant, nous devons spécifier combien de types d'
éléments différents nous voulons
faire de la place. Dans ce cas, je voulais
faire de la place pour trois personnes. Et donc maintenant, j'ai créé
un tableau qui peut contenir jusqu'à trois entiers pour
attribuer une valeur spécifique. Je peux dire les
scores des étudiants, des crochets. Et c'est ici que nous spécifions quelque chose connu sous le nom d'index. Il s'
agit essentiellement d'un compteur pour lequel nous allons
utiliser exactement les
trois emplacements qui nous sont donnés. Cela commence à compter à 0. Je peux donc dire que
l'indice des scores des étudiants de 0 est égal à 96. L'indice
de score des élèves d'un est égal à 49. Les élèves obtiennent
un indice de deux points égal à 76. Maintenant, je vais aller de
l'avant et me débarrasser de ces trois entiers
ici. Et maintenant, je veux
imprimer chacun d'entre eux
sur la console. Pour ce faire, nous pouvons utiliser une syntaxe
très similaire à celle-ci. Je peux donc imprimer l'indice des
scores des étudiants de 0. Je vais ensuite copier
et coller
cela à l'aide de Control
C et Control V, ou de la commande C, de
la commande V sur un Mac. Et maintenant, je peux modifier
ces indices à 12. Maintenant, je peux le faire
avec Shift et FTN. Nous voyons ici les trois chiffres. Mais que se passe-t-il si j'essaie
d'accéder à l'index trois, qui n'existe pas réellement ? En fait, nous recevons ce
petit avertissement ici. Si je survole cela, il est dit que l'index du
tableau est déséquilibré. Si je vais exécuter cela,
nous
allons en fait obtenir une erreur
dans notre console. Et c'est ce
qu'on appelle une exception. Une exception est
que quelque chose fera d'un examen plus approfondi à l'avenir. Mais pour l'instant, il suffit
de penser que c'est une erreur. La raison pour laquelle nous avons obtenu cela
est parce que nous essayons
d'accéder à quelque chose pour lequel la
baie n'a pas de place. Nous n'avons attribué de l'espace que pour
trois entiers dans ce tableau, et nous avons utilisé les trois. Encore une fois, n'oubliez pas qu'il
commence à compter à 0. Donc, les trois places
que nous avons notre 012. Par conséquent, l'indice
trois ne peut pas exister. Et il est dit d'
essayer d'accéder à quelque chose en dehors des limites
de ce tableau. Un autre exemple que je veux vous
montrer est comment créer un entier en définissant des
valeurs spécifiques lors de sa création. Donc, au lieu d'en spécifier
trois, nous pouvons supprimer cela. Ensuite, après les
crochets, nous allons créer
nos propres accolades bouclées. Ici. Nous pouvons ajouter n'importe quel
nombre d'éléments. Nous voulons l'exemple quatre-vingt-dix six, quarante neuf et soixante-dix six. Et maintenant, nous avons
ces avertissements ici. Si je le survole, cela indique qu' une variable est déjà
affectée à cette valeur. Donc, essentiellement, ces
trois lignes de code ici ne sont pas
nécessairement du tout. En les supprimant et que je
réexécute le programme, nous obtiendrons
la même sortie exacte que vous voyez ici. Nous pouvons maintenant disposer de tableaux pour
n'importe quel type de variables. Par exemple, nous pouvons
créer un tableau de chaînes ou un tableau de booléens, mais il s'agit d'un
exemple très simple avec des entiers. Et une dernière chose que je
voulais vous montrer, c'est comment accéder à la longueur ou au nombre d'
éléments d'un tableau. Et une dernière chose que je
voulais vous montrer est comment
accéder au nombre d'éléments, combien d'éléments se trouvent
dans un tableau ? Je peux imprimer ça. Je vais accéder aux scores
des étudiants ici. Nous pouvons accéder à la longueur. Il s'agit d'un entier, et il va indiquer
combien d'éléments se
trouvent à l'intérieur de ce tableau. Je peux donc aller de l'avant et faire ça. Nous voyons ici le numéro trois car il y a
trois éléments. Si j'en ajoutais un de plus ici, je peux le faire une fois de
plus et nous devrions en voir quatre comme nous le faisons ici. Bien sûr, nous ne
voyons pas les 100 imprimés sur la console car nous
n'imprimons pas l'index trois, qui existe maintenant grâce
à ce 100 ici. Mais nous n'imprimons que
les zéros
initiaux ou le 100 est
affiché sur la console.
22. Pour chaque boucle: Dans la vidéo précédente, nous
avons regardé comment créer des tableaux et comment accéder à
chaque élément individuel. Mais que se passe-t-il si nous avions
un plus grand nombre d' entiers et que nous ne
voulons pas imprimer chacun d'eux. Nous pouvons utiliser une
boucle standard ou quelque chose connu
sous le nom de boucle pour chaque boucle aller de l'avant et
parcourir chaque élément. Ici, je vais
vous montrer deux exemples. Ici, nous avons une
norme pour la boucle. Je vais également vous montrer un nouveau concept qui est une boucle pour chaque boucle. Mais d'abord, nous avons un standard
pour la boucle, comme je l'ai dit, pour les parenthèses, les accolades bouclées. Et à l'intérieur, je
vais d'abord créer mon propre
compteur entier entier égal à 0. Bien que le compteur soit
inférieur à ce que les élèves obtiennent la longueur des points. Nous pouvons ensuite augmenter le compteur. Et puis ici, je
peux certainement
imprimer l'
indice des scores des étudiants. Nous pouvons transmettre des variables en
tant qu'index ici. Et cela accédera à l'index 0, puis 12, et ainsi de suite jusqu'à ce que nous parcourons
tous les éléments de ce tableau. Pour le prouver, je peux le
faire avec Shift et F11. Nous voyons ici les quatre
numéros de notre console. Maintenant, la boucle dans les tableaux est si courante qu'ils ont créé
une syntaxe plus courte. Je vais
commenter ces trois lignes. Ici. Je vais utiliser quelque chose
connu sous le nom de boucle pour chaque. Je peux dire pour int number, deux-points, puis le
nom de notre tableau. Dans ce cas, un étudiant note. Ici, le nombre de
variables va contenir chaque élément individuel pendant
qu'il les traverse. Ainsi, lors de la première itération
de cette boucle, la variable
numérique contiendra la valeur 96. La prochaine fois qu'il passe en boucle,
il tiendra 49 et ainsi de suite. Pour le prouver, je peux imprimer le numéro et je peux l'exécuter
avec Shift et FTN. Et ici, nous voyons la
même sortie exacte. Désormais, une boucle
foreach fonctionne généralement, mais dans certains
cas d'utilisation, vous aurez peut-être besoin d'accéder à l'index
que vous utilisez. Par exemple, cette
variable de compteur ici. Dans ce cas, vous pouvez
simplement utiliser une boucle for-standard. Mais encore une fois, dans
la plupart des situations , la boucle pour chaque boucle
sera très bien.
23. Tableaux multidimensionnels: Dans les vidéos précédentes, nous avons
examiné des tableaux simples, mais
examinons maintenant les tableaux multidimensionnels. Fondamentalement, un Raisa a
des tableaux comme valeurs. Ici, je vais créer un tableau qui contient
un tableau de partitions. Par exemple, je peux dire ici
deux crochets, les scores sont égaux aux accolades. Et ici, on va s'
attendre à un autre tableau de valeurs. Mais pour définir ces tableaux, nous allons simplement
utiliser les accolades bouclées. Par exemple, nous avons nos bretelles
bouclées avec quatre-vingt-dix, six, quarante, cinq et quatre-vingts. Maintenant, pour faciliter la
compréhension de la liste actuelle, pour
faciliter la compréhension ce que cela va être
pour Test1. Nous avons ensuite test2, qui a des scores différents, disons 8666 puis 90. Comment voulons-nous parcourir
chaque élément individuel en boucle ? Nous devons d'abord parcourir
chaque tableau individuel, où la valeur devient alors
chaque tableau individuel ici. Nous pouvons donc utiliser une
boucle pour standard ainsi qu'
une boucle pour chaque boucle. Je vais vous montrer un
exemple des deux. Pour le standard for-loop, je suppose que le
compteur int est égal à 0, alors que le compteur est
inférieur à la longueur des points scores, je peux ensuite augmenter le compteur. Maintenant, ici, nous avons
besoin de quelque chose connu
sous le nom de boucle for-imbriquée. Où est-ce, où nous avons
une boucle à l'intérieur d'une boucle ? Je peux dire que pour int
compteur égal à 0, tandis que le compteur deux est
inférieur aux scores, l'indice de la longueur du point de compteur plus le compteur plus le compteur de
ce qui se passe ici. En gros, nous faisons
un standard for-loop, ce que vous
comprenez déjà. Mais ensuite, nous avons une boucle
for-imbriquée. Je crée une deuxième variable de
compteur et je l'utilise partout à
part ici. En gros, ce qui va se
passer, c'est que nous parcourons chaque tableau
individuel. Et c'est ce à quoi
nous aurons accès lors de la première boucle for-loop. index 0 de la première boucle
for-loop sera tout
cet index de tableau un, ou la deuxième itération à nouveau en boucle, sera tout ce tableau. Mais maintenant, nous allons accéder à chaque élément individuel à l'intérieur de l'index des
scores du compteur qui va d'
abord accéder
à ce tableau ici. Nous accédons à la
propriété length à partir du premier tableau. Et alors que la boucle
for-loop initiale est de nouveau, nous allons avoir accès à la deuxième matrice car le
compteur avec un compteur égal. Encore une fois, n'oubliez pas que c'est l'indice 0 Index 1. Les index commencent à compter à 0. Donc, pour accéder à chaque
valeur individuelle, je peux imprimer. abord, je vais
imprimer test plus, j'ajouterai entre parenthèses et
je peux dire compteur plus un. La raison en est
que le compteur commence à 0 et que nous voulons dire test1, test2 et non test 0, test un. Nous allons simplement en
ajouter un au comptoir. Mais cela ne
modifiera pas du
tout la contre-variable parce que nous prenons
essentiellement la valeur du compteur,
puis nous en ajoutons une. Mais nous n'attribuons pas cela
à la contre-variable. Ensuite, nous allons
ajouter chaque score individuel. Par exemple,
l'indice de compteur de scores, puis une deuxième parenthèse, l'indice de compteur à arrêter. Je fais ça avec Shift et F2. Nous voyons maintenant que test1 est 9825
et le test deux est de quatre-vingt six, soixante six et quatre-vingt-dix. Juste pour simplifier un peu
les choses, si je me débarrasse de ces
parenthèses et que je lance ça, nous obtenons essentiellement la même
chose exacte, sauf que ce compteur ici va montrer l'index
0 au fur et à mesure que nous parcourons la boucle
le tout premier tableau, et index1 lorsque nous
parcourons le deuxième tableau. La seule raison pour laquelle
j'ai ajouté plus un ici est de le rendre
plus lisible par l'homme. Maintenant, comme vous pouvez le constater, ce
code est un peu déroutant. Et généralement, vous n'
allez pas travailler avec baies
multidimensionnelles qui, dans l'
idéal, il existe de meilleures
solutions pour gérer vos données, surtout si vos données ont besoin trois
dimensions ou plus de il y aura généralement
une meilleure solution que d'utiliser
autant de tableaux imbriqués. Mais juste pour être complet ici, je vais
vous montrer comment parcourir tableau imbriqué ou
un tableau multidimensionnel
plutôt, avec un, pour chaque boucle, je
dis pour int array, je peux Appelez ce tableau
un pointage deux-points. Cela va parcourir
chaque tableau individuel. Ici, nous avons maintenant
accès à chaque baie. Pour la première
itération, pour chaque boucle, nous aurons
accès à cette valeur. Ensuite, la prochaine itération nous aurons
accès à cette valeur. Nous pouvons utiliser une norme pour
chaque boucle de cette baie. Pour le nombre, le tableau deux-points un. Maintenant, ici, nous
pouvons imprimer le numéro. Maintenant, je peux exécuter cela
avec Shift et F2. Et ici, nous voyons les six numéros
individuels. C'est un bon exemple, comme je l'ai mentionné
dans la dernière vidéo, que pour chaque boucle n'a pas
accès à l'index. Ici, nous disons
ce numéro de test parce que nous
utilisons essentiellement l'index ici. Les deux pour chaque boucle. Nous n'y
avons pas nécessairement accès. Si vous vouliez accéder à l'index pour
imprimer le numéro
de test, vous devez
utiliser une boucle for-loop standard.
24. Varargs: Maintenant que nous avons une meilleure
compréhension des tableaux, nous pouvons aborder un concept
connu sous le nom de varargs, qui est une autre
façon de transmettre autant de paramètres différents
que vous le souhaitez dans une fonction. Je vais donc créer une fonction d'ajout
très simple. Je peux dire public,
statique int add. Et ici, je peux avoir int num1, int num2 ici. C'est très simple. Nous retournons simplement
num1 plus num2. Maintenant, pour m'assurer que
tout fonctionne, je peux imprimer l'
ajout en 1015, et je peux l'exécuter
avec Shift et F11. Nous voyons ici la somme de 25, donc tout
semble fonctionner. Mais que se passe-t-il si je veux ajouter
un autre numéro ici, ou plusieurs
numéros différents autant que je le veux. Le problème ici
est que je dois maintenant ajouter un paramètre individuel pour chaque entrée et un certain nombre d'entrées
pourraient changer. Eh bien, le concept de
varargs résout ce problème. Nous pouvons essentiellement transmettre n'importe quel nombre d'entiers
dans nos paramètres. Par exemple, je peux dire
int trois points
puis des nymphes ou des nombres,
selon celui que vous préférez. Les nombres
vont essentiellement être un tableau. Cela dit, nous n'
avons plus accès à num1, num2. Au lieu de cela, nous
devons maintenant parcourir chaque
élément individuel de ce tableau, comme je l'ai dit, int sum est égal à 0. Et puis je pourrai en revenir. Mais avant de revenir, nous devons ajouter chaque
chiffre à la somme. Je peux utiliser une boucle for-standard ou elle peut utiliser une boucle pour chaque boucle. Donc pour le nombre int, les nombres
deux-points. Et puis je peux dire que la somme
est plus égale au nombre. Maintenant, je peux exécuter cela et
nous devrions voir la somme de tous ces chiffres
ici, qui à 53. Nous pouvons même réduire cela à
autant d'
arguments que nous le voulons. Par exemple, je peux juste avoir étain et ça va
en imprimer dix. Maintenant, il faut garder
à l'esprit que les varargs doivent être le
dernier argument. Parce que si nous avions d'
autres choses ici, pour quelque raison que ce soit, supposons que nous ayons un entier
étudiant ici. Il ne sait pas où ils
commencent et où ils s'arrêtent. Si nous avons des
arguments supplémentaires, nous devrons les
ajouter avant les varargs. Varargs devrait toujours
être à la toute fin. Il sait donc par où ils commencent, et il sait que chaque
autre paramètre transmis, il sera accessible
comme cela varie. Par exemple, dix ici
seront des étudiants, et il identifie
cela ici même, mais tous les numéros supplémentaires ici. Donc seulement 515 vont maintenant
faire partie du paramètre
varargs.
25. Constantes et coulage: Parfois, il se peut que vous ne souhaitiez pas que vos variables
modifient les valeurs et que vous
souhaitiez parfois modifier le type de variables
que sont vos variables. Commençons par
jeter un coup d'œil à quelque chose connu sous le nom de constantes. Cela signifie essentiellement qu' une valeur variable ne peut pas changer. Si je dis que
le nom de chaîne est égal à Alex, je peux l'imprimer
sur la console. Et bien sûr, avant de le faire, je peux changer cela en mon nom complet, qui
est Alexander. Mais disons hypothétiquement je ne veux pas que cette
valeur change. Je peux ajouter le mot clé final avant de créer notre variable. Et maintenant, je reçois une
erreur ici. Si je survole cela, il va dire
que vous ne pouvez pas attribuer de valeur à
une variable finale. Le nom se demande peut-être pourquoi voudriez-vous faire cela ? Pourquoi ne pas simplement ne pas modifier
la valeur de la variable ? C'est peut-être la solution
évidente lorsqu'il s'agit d'un programme simple
comme celui-ci. Mais dans un vrai programme
où vous avez des centaines de fichiers sur des centaines de milliers de lignes de code potentiellement, et potentiellement même
d'autres collègues. Vous ne vous souvenez peut-être pas de
tout ce que fait votre code. vous souvenez peut-être pas non plus
que certaines variables peuvent avoir des effets secondaires
si vous modifiez les valeurs. Si vous
avez une variable dont les valeurs ne doivent pas changer, vous
devez en faire une dernière variable avec ce mot-clé ici. Maintenant, je vais vous montrer quelque chose connu sous le nom de casting, qui consiste essentiellement à prendre une variable et attribuer à une
variable différente d'un type différent. Par exemple, je pourrais dire que le montant
int est égal à dix. Et je peux ensuite créer un double qui contient
une valeur décimale. Par conséquent, nous pouvons
avoir des nombres non entiers. Et je peux dire que le nouveau
montant est égal à un montant. Maintenant, si je vais de l'avant et imprime nouveau montant et que je l'exécute
avec Shift et FTN. Nous voyons maintenant dix points 0. Et dans ce cas, nous n'avons pas
besoin de lancer quoi
que ce soit , car tous les doubles peuvent
techniquement toujours être des entiers. Mais une fois que nous aurons créé un double, il va s'ajouter à
la décimale de 0, mais supposons que cela
allait être inversé. Je peux dire que le double
montant est de 10,5. Je pourrais alors dire que int nouveau
montant est égal au montant. Et nous avons une erreur ici. Si je survole cela, cela indique que le type requis est un entier, mais que le type fourni est un double. Eh bien, nous pouvons faire quelque chose
appelé « lancer cet entier l'
exception de la double valeur
en tant que valeur entière. Et pour ce faire, nous pouvons ajouter entre parenthèses et
le type de variable, dans ce cas int juste avant
le nom de la variable cible, qui est dans ce cas la quantité. Maintenant, si je lance cela, nous
disons maintenant dix dans la
console et non 10.5, car les entiers
ne peuvent être que des nombres entiers. Donc, tout ce qui n'
est pas acceptable, par
exemple, cette 0,5
va être ignorée. Le nombre entier qui
reste dans ce cas, étain va être affecté
à notre nouvelle
variable de montant ici. C'est ainsi que vous
présentez des valeurs primitives. Et je vais discuter de
la différence entre les primitives et les types
de valeurs de référence dans une prochaine vidéo. Prenons un
exemple rapide de la conversion d'un entier
en chaîne. Par exemple, nous
avons un nombre entier dix, mais nous voulons la chaîne
dix, quelque chose comme ça. Eh bien, je peux dire que le
nombre entier est égal à dix. Ensuite, je peux dire chaîne, chaîne égale chaîne avec
une valeur de point S majuscule de. Ici, nous pouvons voir
tous les différents paramètres
possibles
que nous pouvons transmettre. Nous pouvons transmettre un entier, un caractère à flot
et bien d'autres. Dans ce cas, nous
voulons simplement passer un numéro. Ensuite, je peux imprimer
une chaîne sur la console. Et si je fais ça, on
en verra dix comme une corde. Maintenant, si je voulais
faire l'inverse ici, je peux dire chaîne, chaîne
égale à dix entre guillemets. Je pourrais alors dire int number. Je pourrais alors dire entier avec
un majuscule I dot parse int. Et nous voyons ici que nous
pouvons passer dans une ficelle. Et cette fonction supérieure va également
renvoyer un entier. Je peux transmettre les arguments
de chaîne. Ensuite, je peux imprimer le
numéro sur la console. Si je fais ça, on
devrait encore en voir dix. Mais maintenant, il s'agit d'une valeur numérique
réelle. Je le voulais donc, j'ai pu l'augmenter d'un
avant de l'imprimer. Maintenant, avec C11, au préalable, nous conversions un
nombre en chaîne, donc nous ne pouvions pas augmenter cela
une fois qu' il était déjà
sous forme de chaîne.
26. Méthodes de chaîne courantes: À ce stade, vous
devriez déjà savoir comment un basique si Stephen fonctionne. Mais si vous avez déjà essayé comparer des chaînes
avec une instruction if, vous remarquerez peut-être que cela
ne fonctionne pas correctement. Par exemple, commençons par demander des commentaires à l'utilisateur. Je pourrais dire, entrez votre nom. Ensuite, je
vais créer un scanner. Je vais appeler cette entrée. Je vais rendre cela égal à un nouveau scanner qui passe
dans le système point n. C'est des
choses assez similaires à celles que nous avons déjà vues. Je pourrais dire flux, nom
d'utilisateur est égal au point
d'entrée suivant la ligne. Cette opération permet de récupérer la
ligne entière entrée par l'utilisateur. Disons maintenant que si je
saisis mon nom en tant qu'Alex, il dira bonjour Alex. Bien sûr, dans un vrai programme, nous pourrions simplement utiliser
la valeur de la variable. Mais je veux le faire
spécifiquement dans une déclaration si pour
démontrer quelque chose. Je peux dire que si le nom d'utilisateur est
exactement égal à Alex, je ne pourrais pas imprimer Hello Alex. Je peux courir ça avec
Shift et je l'ai quitté. Je pourrais ensuite entrer mon nom
et je vais entrer la chaîne exacte que nous
recherchons dans l'instruction if. Donc, Alex, avec un A majuscule, si je saisis ça
et que j'appuie sur Entrée, on ne voit rien
imprimé sur la console. En effet,
les forces ne peuvent pas être comparées à l'aide d'un signe
double égal. Si je survole cela,
cela indique que les valeurs de chaîne
sont comparées à l'aide doubles égaux et non
égaux en tant que méthode. Afin de comparer les chaînes. Au lieu d'utiliser la pâte égale, on peut prendre la ficelle,
on peut appuyer sur point. Et ici, nous avons accès
à de nombreuses fonctions différentes. Nous en regarderons quelques-uns vers la fin de cette vidéo. Mais celui que je veux vous
montrer est appelé égal et égal à ignorer la casse. Nous allons donc commencer par des égaux. Ici, nous pouvons passer
une autre chaîne, par
exemple, Alex
et moi pouvons exécuter ça. Et je peux maintenant entrer
Alex avec un majuscule et je dirai bonjour Alex. Si je refais ça, je peux
entrer Alex avec un A minuscule et rien que nous avons imprimé. Si je voulais ignorer la majuscule
de l'une ou l'autre chaîne, alors je peux dire égal à ignorer la
casse et ensuite transmettre Alex. Donc, si je lance ça, je peux maintenant entrer Alex avec un A minuscule,
et il imprimera Hello Alex,
car il ne se
souciera pas de la majuscule de l'une et il imprimera Hello Alex, car il ne se
souciera pas ou
l'autre des chaînes. C'est ainsi que nous comparons deux chaînes dans
une instruction if. Mais jetons maintenant un coup d'
œil à quelques
autres exemples de méthodes de chaîne couramment
utilisées. Je vais aller de l'avant et
supprimer tout ce code. Et je vais simplement
dire que le nom de chaîne est égal à Alex. Et puis ici,
je ne vais pas imprimer thème, adopter en minuscules. Je n'ai pas pu exécuter ça
et nous allons
voir Alex qui a un majuscule. Maintenant, nous les affichons toutes en
minuscules dans la console. la même manière, nous devons
également faire des majuscules. Et bien sûr, si je fais ça, on voit Alex en
majuscules et dans la console. Il y a quelques
autres fonctions que nous
avons , comme la longueur. Si je l'exécute,
nous allons voir combien de caractères individuels se
trouvent dans la chaîne. Dans ce cas, c'est pour. Et nous pouvons simplement
appuyer sur un point à la fin du nom et nous voyons un tas d'
autres méthodes que nous pouvons utiliser. Par exemple, nous pouvons obtenir ici un personnage à un index spécifique. Ici, je peux obtenir l'index un, qui devrait être un l minuscule. Si je l'exécute, nous pouvons le
confirmer dans notre console. Ici, nous voyons une
minuscule que je suis retournée. Nous avons beaucoup
d'autres options. Par exemple, nous pouvons concat, ce qui signifie concaténer, en ajoutant
essentiellement une partie
supplémentaire d'une chaîne. Je peux donc ajouter tout
mon nom de famille ici. Et si je fais ça, on voit
maintenant Alex Flores. Et l'espace ajouté dans la console est dû à l'
espace que j'ai ajouté ici. Par défaut, il n'
ajoutera aucun espace. Il ne fera que
ce que vous lui direz. N'hésitez pas à jouer avec d'autres
fonctions de chaîne ici, il existe un certain nombre
de fonctions utiles que vous pouvez utiliser pour changer la chaîne ou utiliser
la chaîne de différentes manières.
27. Séquences d'échappement: Plongeons maintenant dans
un autre concept de cordes connu sous le nom de séquences d'échappement. Il s'agira essentiellement de caractères
individuels qui ont des significations spécifiques
au sein des restrictions. Par exemple, je peux dire chaîne, chaîne égale bonjour
espace, monde. Je vais l'
imprimer sur la console. Et bien sûr, cela
ne ferait que imprimer Hello World. Mais que se passe-t-il si je voulais que Hello et World soient sur des lignes différentes ? Eh bien, je peux utiliser une barre oblique
avant n maintenant ça devient
orange. C'est parce que cette séquence connue sous le nom séquence
d'échappement pour la barre oblique
n va être un saut de ligne. Pour le prouver, je peux le
faire rapidement Shift Shift et FTN. Ici, nous voyons Hello World
sur la ligne suivante. Une autre est la barre oblique n, qui va être un onglet. Par exemple, après avoir
ajouté une nouvelle ligne, je peux maintenant ajouter un nouvel onglet. Et je peux refaire ça. Ici, nous voyons Hello world, mais le monde est maintenant indenté
une fois par un caractère de tabulation. Nous pouvons également faire deux barres
obliques, qui ne deviennent qu'une
seule barre oblique. En raison des heures, nous ajoutons
une barre oblique. Il va supposer qu'il
s'agirait d'un personnage d'échappement ou
d'une séquence d'échappement. Mais si je voulais une barre
oblique et la chaîne, je n'ai pas eu à échapper à cette barre
oblique en ajoutant simplement
200 mots de bureau. Je peux ensuite exécuter ça. Ici. Nous voyons maintenant une
barre oblique dans la chaîne. Alors qu'au préalable,
il va supposer que nous allons essayer de nous
échapper avec un W majuscule, ce qui ne veut vraiment rien
dire. Il va donc nous
faire une erreur. Nous pouvons également échapper aux
guillemets doubles. Cela deviendra donc
une double citation normale. Et la raison en est
que les guillemets doubles représentent le début ou
la fin d'une chaîne. Si je devais simplement
ajouter une double guillemets ici, ne saurai pas
que cela fasse
partie de la chaîne. On pense plutôt que nous essayons de faire une variable
dans
la chaîne actuelle. Si je suis allé dans le monde pour être entre guillemets, je peux ajouter les guillemets doubles, mais je dois y échapper en y
ajoutant une idée d'
avance. Maintenant, cela semble
un peu déroutant. Je vais donc remplacer toutes les séquences d'
échappement précédentes par un simple espace. Maintenant, je peux lancer ça et
nous devrions voir Hello World, mais le monde est enroulé entre
guillemets doubles. Il existe maintenant un certain nombre
d'autres caractères de
séquence d'échappement que vous pouvez utiliser, mais ce sont de loin
les plus courants. Vous allez voir.
28. Le cours de calcul et les chiffres aléatoires: Jetons un coup d'
œil au cours de mathématiques. Et il y a plusieurs choses
différentes que nous pouvons
faire en ce qui concerne les opérations mathématiques
de base. Le premier exemple consiste
à obtenir la valeur absolue d'un nombre, ce qui va
simplement convertir un nombre négatif en nombre positif. Mais plus techniquement,
cela va
compter la distance entre
ce nombre et 0. Je vais imprimer des maths
avec un majuscule M dot abs, ce qui représente une valeur absolue. Et ici, nous pouvons
voir que nous pouvons transmettre un certain nombre de valeurs
numériques différentes. Dans ce cas, nous pouvons
passer en dix positifs. Je suis allé copier et coller ça
et passer en négatif dix. Et puis je peux faire ça
avec Shift et FTN. Et ici, nous voyons de l'
étain dans les deux cas. Donc, en termes simples, cela
convertira simplement un
nombre négatif en nombre positif. Je vais aller de l'avant
et commenter cela. aller de l'avant, je peux
imprimer un point mathématique minimum. Et cela va prendre en compte deux nombres du même type, ce qui renverra la valeur
minimale entre eux. Par exemple, je peux passer en 107, allant
également
imprimer math.max, ce qui est un concept similaire, mais nous retournerons la valeur
maximale entre eux. Je peux également en retourner
107 ici. Donc, si je l'exécute la première fois, nous en aurons sept car c'est la valeur minimale. Mais la deuxième fois,
nous allons en avoir dix parce que
c'est la valeur maximale. Maintenant, si nous parlons de points mathématiques et que
nous passions en revue toutes ces opérations, il y a un certain nombre d'opérations mathématiques
différentes. Par conséquent, vous
connaissez peut-être votre
expérience en mathématiques
à l'école. Mais quelques
exemples plus basiques seront le plancher, qui va essentiellement
arrondir le nombre vers le bas. Et il scellera également, ce qui augmentera un nombre. Par exemple, je peux passer en 0,2. Je peux envelopper ça à l'intérieur de l'
impression ici. Ensuite, je peux aussi imprimer Math.Floor et je
peux passer en 0,9. Maintenant, si je l'exécute
dans notre console, nous allons en voir
un et aussi 0. Cela va s'arrondir, quoi qu'il arrive,
peu importe s'il est inférieur à cinq. Et il va
arrondir, quoi qu'
il arrive, peu importe si elle est
supérieure ou égale à cinq. Une autre chose que je
voulais vous montrer, c'est comment
générer un nombre aléatoire. Il y a deux façons de le faire. Il y a une
façon plus ancienne que vous allez
probablement la
voir derrière un moment dans le travail avec d'autres codes sont en train de suivre
d'autres tutoriels. Et il y a un moyen plus récent. L'ancienne façon, je peux dire int
random est égal au nouveau aléatoire avec une parenthèse R majuscule ici à la presse Alt et
Entrée pour importer cela, je pourrais alors dire NextInt. Je peux ensuite imprimer au
hasard sur la console. Donc, si je lance ça, on va
avoir un numéro aléatoire. De toute évidence, cela va
générer un nombre aléatoire, mais ce n'est pas
nécessairement ce que nous voulons. La plupart des fois, nous voulons
quelque chose entre 010, c'est juste 0100,
des choses comme ça. Nous pouvons donc passer
un entier ici. Par exemple, dix, dirigez-nous. Il va maintenant générer
un nombre aléatoire compris entre 09. Mais si nous voulions
un à dix, nous pouvons simplement en ajouter
un à la fin. Donc, si je refais ça,
nous en voyons deux. Je ne sais pas si je continue à courir
ça, on va avoir votre numéro aléatoire entre 110. C'est l'ancienne
façon de le faire. Il existe une nouvelle façon de procéder. Donc le nombre aléatoire savait, je pourrais dire int
aléatoire égal thread, point aléatoire
local, point
actuel suivant int. Et cela fonctionne exactement de la
même manière qu'avant. Et aussi avec l'ancienne
et la nouvelle façon de faire ce week-end, générez
d'autres valeurs aléatoires, par
exemple booléennes. Si nous voulions une valeur aléatoire
vraie ou fausse, qui apparaîtra
de temps en temps. Vous pouvez utiliser le booléen suivant. Vous pouvez obtenir ensuite du bélier, des
doubles et d'autres
choses comme ça. Mais par exemple,
ici, nous pouvons passer un int, puis la
limite sera dix, et nous en ajouterons un
à la fin. Et je peux ensuite imprimer au
hasard sur la console. Voici donc deux façons
différentes de générer des nombres
aléatoires au sein de
votre programme Java.
29. Variables de caractères primitifs et de référence: Cette vidéo va
être un peu plus avancée que les vidéos
précédentes. Nous allons en savoir plus
sur les variables primitives par rapport aux variables de type
référence et comment certaines variables
sont stockées en mémoire. Je vais donc minimiser
mon projet ici. Nous avons donc plus de place
pour ces diagrammes. Ici, nous avons la pile et
ici nous avons le tas. Il s'agit de deux endroits
différents où les informations peuvent être stockées
dans la mémoire de votre ordinateur. Nous commencerons par
parler de valeurs de type primitif. Par exemple, je pourrais dire que le nombre
int est égal à dix. C'est ce qu'on appelle une valeur
primitive de type evalue stocke
généralement
des informations de base. Toutes les valeurs de type primitif sont stockées directement sur la pile, et cela va
de bas en haut. D'autres exemples seraient booléens. Je peux dire que la
programmation est vraie ? Je peux alors avoir une
lettre char égale à a. Je peux avoir un double,
je peux appeler ça pi. Et donc c'est égal à 3,14159. Et voici les principales valeurs de
type primitif que
vous allez voir. Laissez-moi y retourner. Laissez-moi en supprimer quelques-uns et
revenons à notre numéro. Mais que se passe-t-il
si je devais attribuer un nombre égal à la
valeur du numéro un ? Par exemple, le numéro deux
égal au nombre le plus gras
créera toujours une valeur
entièrement nouvelle sur la pile. Le numéro deux est désormais égal à
la valeur du nombre. Que se passerait-il
si je modifiais la valeur du numéro un
qui affecte le numéro deux, je vais imprimer le numéro. Et puis, à la ligne suivante, je vais imprimer le numéro deux. Avant cela, je vais
dire que le nombre est égal à 15. Ce qui va se passer ici, c'est
parce qu'il s' agit de
deux valeurs distinctes. numéro deux ne sera
pas du tout affecté. Cela va donc imprimer
15 puis dix. Pour le prouver, je peux l'
exécuter avec Shift et FTN. Nous voyons ici 1510. types primitifs auront donc leur propre
valeur individuelle sur la pile, même si nous l'affectons
à une variable existante. Cela va simplement
créer une autre variable dans la mémoire de
votre ordinateur et
lui attribuer cette valeur. Cela signifie que la ligne
huit va
créer un entier distinct qui n'a aucune corrélation avec cette ligne numéro sept, à
part le fait qu'ils partagent la même valeur. C'est bien, mais qu'
est-ce qu'un type de référence ? Et alors que le tas utilisé. Je vais donc
laisser tout ce code ici et je vais
créer un tableau d'entiers. Je peux dire que les
nombres int sont 51015. Et cela va créer quelque chose
à la fois
sur la pile et sur le tas. Mais les valeurs 51015
sont stockées sur le tas. Et les nombres variables vont être stockés sur la pile. Mais cela ne fera que stocker quelque chose
connu sous le nom de pointeur. Les détails exacts sur
le
fonctionnement des pointeurs en coulisses ne sont pas trop importants
lorsque vous travaillez avec Java, car Java gère
beaucoup de choses pour nous. Mais cela va simplement pointer vers la valeur réelle qui a été stockée sur le tas. Par exemple, je peux créer
un autre tableau ici. Je peux appeler cet exemple. Je peux définir cela comme étant égal à des nombres. Ce qui se passe ici, ce sont
nos valeurs de tableau 51015. Il n'existe toujours qu'une seule fois
dans la mémoire de notre ordinateur. Et ces trois
valeurs sont stockées dans le tas sous forme de tableau. Mais les variables, nombres et l'exemple sont
stockés sur la pile, mais ce sont désormais
des pointeurs pointant vers le
tableau d'entiers. Cela signifie que si nous
modifions 510 ou 15, nous
verrons réellement ce changement quelle que
soit la variable à laquelle
nous essayons d'accéder, qu'il
s'agisse de
nombres ou d'exemples. Pour le prouver, je
peux dire que les chiffres, l'indice 1, qui
sera le dix ici, est égal à 11. Je peux ensuite
imprimer l'index des nombres1. Et puis je peux
imprimer l'exemple d'index un. Je peux le faire avec
Shift et FTN. Nous en voyons ici 11 dans les deux cas. En effet,
ces trois valeurs sont stockées sur
le tas une seule fois. Ensuite, le
tableau de nombres et l'exemple de Ray vont simplement
pointer vers cette valeur. Cela signifie que nous avons deux variables
distinctes que nous voyons ici lors de l'
exécution de votre code, mais que les valeurs ne sont stockées
qu'une seule fois à l'intérieur du tas. Et c'est une différence entre les primitifs et les types de référence. Les types de référence n'auront leurs valeurs qu'une seule fois dans le tas avec
un pointeur sur la pile. Mais
les types primitifs sont si simples que nous pouvons simplement stocker
les valeurs sur la pile. Donc je peux dire que int
num1 est égal à cinq, int num2 est égal à dix. Et puis je vais
appeler une fonction d'ajout, qui fera
ici dans une seconde, et je passerai en 510. En dehors de notre
fonction principale, je peux dire public, statique int add, int
num1, int num2. Ici, je peux
retourner num1 plus num2. Ce qui va se passer ici,
c'est que lorsque nous transmettons 510, il va en fait
créer deux autres variables sur la pile appelées num1 et num2 attribuent les
mêmes valeurs exactes que les arguments que nous sommes
Je passe juste ici. Pour le prouver, après
notre fonction d'ajout, je vais imprimer num one avec une virgule puis num2. Mais dans notre fonction d'ajout, je vais dire que
num1 est égal à dix. Maintenant, si je fais ça, on voit maintenant 510. Mais nous avons en fait
changé num un égal à dix. Et en fait, la somme
de la fonction d'ajout. Si je devais mettre cela à
l'intérieur d'une déclaration imprimée, cela va imprimer 20. Donc, si je cours ce temps
plus chaud avec les 20 dans la console et ensuite 510, décomposez cela ligne par ligne juste au cas où cela serait
déroutant pour vous. Nous avons d'abord créé
deux variables
stockées sur la pile, 510. Nous pensons que nous sommes allés
imprimer la somme, en passant par 510. Notez que nous
ne changeons num1, num2 à aucun moment. Il est important de noter que
lorsque nous atteignons la ligne dix, lorsque nous passons num1
et num2 à la console. Ces deux variables
ne changent pas du tout. Une fois que nous appelons réellement
la fonction add, nous passons 510, ce qui va
créer deux autres variables stockées sur une pile. Et il se trouve que nous
modifions simplement le premier chiffre ou le premier argument
ici, à la valeur de dix. qui signifie essentiellement que nous ajoutons dix à quel que soit le
deuxième argument, qui en l'occurrence, c'est dix, et c'est pourquoi
nous en avons 20 ici. Maintenant, l'important
ici est que nous modifions le tout premier
argument transmis, mais il y a un
tout nouveau nombre entier. Les types primitifs
vont simplement passer dans leur valeur. Et il ne s'agira essentiellement
que d'une copie de cette valeur. Toute modification apportée au
sein de la fonction ne l'affectera pas réellement dans la fonction qui
l'a initialement appelée. En gros, nous modifions
notre premier argument ici. Mais cela ne modifie rien de notre fonction principale. C'est parce qu'il s'
agit de types primitifs et que la valeur est transmise. Mais que se passe-t-il si nous
transmettons un tableau d'entiers ? Par exemple, nous avons un
tableau avec seulement deux valeurs. Au lieu de num1 et num2, je peux dire que le
nombre int est égal à 510. Je pourrais ensuite passer en chiffres. Et puis je vais
consigner l'
index des nombres 0 et l'index des nombres un. Maintenant, nous avons un problème
avec notre fonction car elle coupe s'attendait à deux entiers
différents. Mais au lieu de cela, je veux simplement ajouter deux nombres ensemble
à partir d'un tableau de nombres, comme je dis int,
crochets, nombres. Ensuite, je peux renvoyer des nombres, indexer 0 plus les nombres et X1. ******* exécutez ceci
avec Shift et F11. Ici, nous devrions voir
à la fois les numéros imprimés et chaque
numéro individuel comme nous le voyons ici. Mais que se passerait-il si je
change l'index des nombres 0 à dix, qui est à l'origine
cinq dans ce tableau, gardez à l'esprit que ce tableau n'
est pas modifié du tout. Et nous passons le premier élément de la baie ici
le premier élément de la baie
dans ce
journal de console. Donc, si je lance cela, nous disons
maintenant que 20 imprimés comme une somme Kf modifient le premier indice
qui a l'indice 0, qui est cinq, par la
valeur de tan ici. Ce qui signifie que nous
imprimons dix plus dix. Mais l'index des nombres 0 imprimé sur la console
est maintenant modifié. En effet, la
référence ou le pointeur vers ce tableau est transmis
en argument, non les
valeurs réelles elles-mêmes. Donc, lorsque nous allons à Modify
numbers index 0, il s'agit en fait de modifier
le même tableau exact que celui que nous avons créé en ligne cinq, car nous passons simplement ce pointeur qui se trouve sur une pile qui indique simplement
les valeurs réelles qui sont stockées sur le tas. Et c'est une
différence importante entre les primitifs et les types de référence lorsque vous travaillez
avec des fonctions, il est important de
savoir que lorsque vous modifiez quelque chose en tant qu'argument, par exemple, int
number ici, qu'il peut ou non modifier cela
avec le reste de votre programme
selon qu'il s'agit d'un type primitif ou de référence. Aujourd'hui, beaucoup de ces concepts sont nouveaux et je sais que c'est probablement l'un des concepts
les
plus déroutants en matière de programmation. Si vous débutez dans la programmation. Donc, si vous
rencontrez des problèmes, je vous suggère de regarder
cette leçon nouveau et d'essayer de me concentrer sur la pile et le tas représentations
visuelles pour tout expliquer.
30. Les bases de la programmation orientée objet: Nous allons maintenant nous
plonger dans un concept connu
sous le nom de programmation orientée objet. Et une façon courte de
dire que c'est cerceau ou OOP. Et c'est certainement
là que Java devient beaucoup plus intéressant et que nous pouvons construire des
programmes réels avec lui. Mais tout d'abord, parlons de ce qu' est la programmation orientée objet ? Eh bien, il s'agit d'un concept qui n'
est pas exclusif à Java. D'autres langages de programmation
ont également cette constante. C'est essentiellement
là que nous pouvons représenter des objets du monde réel
dans notre code. Et dans ces prochaines vidéos, je vais expliquer
ce que signifient d'autres mots clés, tels que classe et statique,
et d'autres mots-clés que j'ai mentionnés que j'
expliquerai plus tard. Jetons rapidement
un coup d'œil à ce qu' est
une classe par rapport à un objet. La classe va essentiellement être le code réel qui représente le Blueprint d'
un certain type de fonctionnalité ou d'un
certain type d'objet. Maintenant, quand je dis « plan directeur », je veux que vous pensiez à
un plan de la Maison. Par exemple, si vous
voyez un ensemble de maisons qui se
ressemblent, il n'y en a qu'un seul, un seul plan qu'elles
copient et collent. Et chaque maison sera son propre objet. Une maison va
être un objet ou le plan sera
la classe. Nous pouvons donc avoir une
mini-instance de chaque classe individuelle et ce
sont des objets. Ce qui a réellement utilisé
cet exemple de maison dans un véritable exemple de programmation dans notre paquet principal
ici, je peux cliquer avec le bouton droit de la souris. Je peux aller à New, puis à la classe
Java ici. Je vais nommer cette maison, mais je vais utiliser
une notation Pascal, qui signifie
essentiellement que nous mettons en majuscule la toute première lettre
de chaque mot. Si j'avais un exemple de maison, le H et le E
seraient
tous deux en majuscules. Mais dans ce cas, je veux juste
créditer la classe « house ». Allez-y et appuyez sur Entrée et il devrait s'ouvrir automatiquement. Et maintenant, dans cette classe
ou dans ce Blueprint, nous pouvons ajouter
différentes propriétés. Qu'est-ce qu'une propriété ? s'agit essentiellement de variables
et de méthodes spécifiquement définies
dans cette classe de maison. Et cela nous aide à accéder à
différentes valeurs ou à travailler avec différentes fonctionnalités dans
le contexte d'une maison. Plongez beaucoup plus en détail
sur ce qui serait réellement dans un cours de maison
au cours des prochaines vidéos. Mais d'abord, jetons un
coup d'œil à la façon dont cette classe de maison peut réellement être utilisée dans
notre classe principale ici. Je vais aller de l'avant et supprimer
certains de ces commentaires. Je peux maintenant dire maison
avec un H majuscule et ici nous voyons qu'il
va essayer d'importer à partir de notre système de fichiers
local. Je peux aller de l'avant et appuyer sur Entrée, puis nous pouvons aller de
l'avant et nommer notre variable. Dans ce cas, je dirai
maison avec un h minuscule, je vais nous assigner à
égal à une nouvelle maison. Maintenant, le nouveau mot-clé fait partie de la programmation
orientée objet et des classes, mais les détails
seront expliqués ultérieurement. Pour l'instant, nous pouvons penser que c' est
simplement
une nouvelle maison, une classe de maison juste ici. Ce
sera le plan directeur, mais maintenant nous avons créé une véritable instance de notre maison. Prenons un exemple très simple en faisant
imprimer la maison helloworld. Je peux dire « vide public ». Et remarquez que nous n'avons
pas de statique ici. Je vais expliquer la
différence entre les méthodes
statiques et non statiques dans quelques vidéos. Mais pour l'instant, n'incluez pas de
statique dans cet exemple. Si public, nul, imprimé. Et puis je n'
aurai aucun paramètre. Je vais simplement
imprimer Hello World sur la console. Maintenant, si je survole cela, nous voyons que la méthode d'
impression n'est jamais utilisée. Allons de l'avant et essayons de l'utiliser. En revenant dans notre classe principale ici, nous avons accès
à cette maison. Je peux dire que House presse une période. Il va y avoir
une liste déroulante contenant toutes les propriétés et
méthodes disponibles auxquelles nous pourrons accéder. Dans ce cas, nous avons accès
à notre fonction d'impression. Je peux aller de l'avant et appuyer sur Entrée, et je vais lancer ça. Et ici, nous voyons Hello
World dans la console. Je vais aller de l'avant et
renommer cette variable. Je peux cliquer n'importe où
dans le nom de la variable, et je peux maintenir la touche Maj enfoncée et
appuyer sur F6 en même temps. Nous pouvons maintenant aller de l'avant
et changer cela. Je vais changer ce nom pour ma maison avec un
H majuscule et un m minuscule. Maintenant, je vais créer
une toute nouvelle variable. Comme je l'ai dit, House. Votre
maison est égale à une nouvelle maison. Et ces deux variables
n'ont rien en commun
à part le fait qu'elles ont été
créées avec la même classe. Fondamentalement, ils sont
voisins l'un de l'autre, mais ce n'est pas la même maison. Si votre voisin a une maison
similaire à la vôtre, cela
ne signifie pas que
c'est votre maison. Si c'est juste une maison similaire basée sur
le même plan. Par exemple, je peux dire
votre empreinte de points maison. Et je peux aller de l'avant et faire ça. Et maintenant, nous allons
voir deux instances de HelloWorld et de notre console,
comme nous le voyons ici. C'est la
base même des classes et comment créer des objets
autour de ces classes. Et au cours des prochaines vidéos, nous allons
plonger beaucoup plus loin dans la
programmation orientée objet, où nous pourrons créer un objet maison
fonctionnel qui représente vraiment un véritable objet. maison dans
nos programmes.
31. Constructeurs: Nous allons maintenant parler d'un concept appelé constructors, qui sera essentiellement une méthode
intégrée dans chaque classe exécutée ou invoquée chaque fois qu' une nouvelle instance de cette
classe est
créé. Il existe en fait un constructeur
par défaut dans chaque classe. Que nous en
créions un nous-mêmes ou non, il en aura
automatiquement un. Donc, un constructeur, nous allons
regarder quelque chose comme une méthode, mais légèrement différent
parce qu'il
n'allait pas avoir de type de retour, comme le vide ici. Et le nom du
constructeur doit également
être le nom exact de la classe. Je peux donc dire
maison publique avec une majuscule H. C'est maintenant connu
sous le nom de notre constructeur. Pour le prouver, je
vais imprimer une nouvelle maison qui a été faite. Et je vais l'exécuter
dans notre console. Ici, nous voyons qu'une nouvelle
maison a été créée parce que nous avons créé une nouvelle instance de notre classe de
maison
ici même comme variable ma maison. Et cela a fait
fonctionner le constructeur dans notre imprimerie
Hello World. Mais ensuite, nous créons
une autre maison, ce qui signifie que l'autre
constructeur est une rampe. Et puis, bien sûr, nous
imprimons à nouveau Hello World. Désormais, un constructeur
ne peut rien renvoyer, mais il ne peut pas prendre en compte
différents paramètres. Par exemple, je peux avoir un nom de propriétaire de
chaîne. Ensuite, je peux dire qu'une
nouvelle maison a été construite. Le propriétaire est comme un nom de propriétaire
additionnel. Nous avons maintenant deux
problèmes connexes ici. C'est parce que
dans notre classe principale,
nous ne
transmettons aucun argument. Par exemple, ici,
il peut passer un Alex. Bien sûr, vous pouvez ajouter
votre propre nom. Et ici, je vais
passer à Bob. Bien sûr, vous pouvez ajouter
n'importe quel autre nom que vous voulez. Donc, si je l'exécute, nous pouvons maintenant
jeter un coup d'œil à notre console. Et ici, nous voyons qu'une
nouvelle maison a été construite. Le propriétaire est Alex. Et c'est parce que nous avons
créé une nouvelle instance de classe de maison ici même. Et nous avons passé un ALEKS en tant que
chaîne à notre constructeur. Et puis, bien sûr, lorsque
nous créons une maison de Bob, nous voyons que le propriétaire est
Bob et la console. Maintenant, à l'instar des méthodes, les constructeurs peuvent être remplacés, sorte que nous pouvons transmettre
différents types de valeurs dans les paramètres. Comme je l'ai dit, maison publique. Je ne pouvais pas dire les planchers. Ici, j'ai pu imprimer une
nouvelle maison qui a été faite. Il a que je peux ajouter sur les planchers et cela peut ajouter
sur les planchers de ficelle. Et je vais aussi mettre des
parenthèses autour du S parce que nous pourrions passer dans
une maison à un seul étage. Nous avons donc maintenant deux constructeurs
différents, qui vont être
exécutés à des moments différents. Par exemple, sauvegardez la maison de Bob. Au lieu de passer à Bob, je vais en faire
une maison de deux étages. Vous remarquerez peut-être que IntelliJ va
automatiquement remarquer qu'il s'agit maintenant du paramètre planchers. Ce ne sera pas le propriétaire nommé comme il est dit ici. C'est parce qu'il comprend
que nous écrasons le constructeur pour qu'il
transmette deux
types de variables différents. Et ici, nous
passons un entier. Cela signifie donc que nous
allons utiliser ce constructeur ici. Donc maintenant, si je lance ça et si
nous regardons notre console, nous voyons maintenant que la première instance de notre maison
va s'imprimer. Le propriétaire est Alex. Mais la deuxième instance
de notre maison
va imprimer
un a deux étages. C'est parce que nous utilisons
les différents types de constructeurs qui ne
transmettent que des entiers. Dans cet exemple, nous venons d'
imprimer du texte, mais dans de vrais cas d'utilisation, que nous allons jeter un coup d'œil
dans quelques vidéos. Nous allons
essentiellement les utiliser comme fonctions de configuration pour nous assurer que tout le reste est
configuré et fonctionnera correctement pour que notre
maison fonctionne correctement.
32. Le mot-clef et les propriétés: Nous allons maintenant
examiner le, ce mot-clé, ainsi que la façon de créer différentes propriétés
qui ne seront que des variables
à
l'intérieur de notre classe. Je vais me débarrasser de
ces commentaires ici. Et je vais également me débarrasser de
ces déclarations d' impression
au sein de nos deux constructeurs. Maintenant, à l'intérieur de notre classe, mais en dehors des fonctions, je vais créer quelques
variables différentes. Par exemple, je pourrais dire chaîne
privée avec un S
majuscule, le nom du propriétaire. Je ne pourrais pas dire des étages
privés. Et la partie privée de cela, ainsi que le public sur certaines de ces méthodes seront expliqués dans une prochaine vidéo. J'ai déjà démontré comment surcharger
les constructeurs. Mais dans ce cas, nous
voulons simplement un seul constructeur avec les deux
informations transmises. Ici, je peux dire « int floors ». Et maintenant à l'intérieur de cela, je vais vouloir attribuer
le nouveau nom de propriétaire et les nouveaux étages
des paramètres à nos variables locales. Parce que ces deux
variables sont
différentes ici , alors
nos paramètres sont ici. Mais avant de le faire, nous avons deux problèmes connexes
car si je reviens en arrière, nous utilisons maintenant une
syntaxe incorrecte pour un constructeur. Ici, disons que ma
maison a deux histoires, moins de dire qu'il s'agit
toujours d'une maison de Bob, que vous pouvez bien sûr utiliser
n'importe quelle ficelle que vous voulez dessus, mais c'est aussi deux histoires. Donc, en
revenant en classe de maison, nous n'avons plus aucun problème. Mais comment allons-nous
définir le nom du propriétaire en ligne égal au paramètre
transmis. Parce que, bien sûr, ils
portent le même nom exact. Dire que le nom du
propriétaire est égal au nom du propriétaire ne fait
vraiment rien. Il ne modifie pas la
ligne pour quelque
raison que ce soit, car cela
va faire référence à la
variable la plus locale de la portée, qui dans
ce cas
sera simplement le paramètre sous le
nom ici. Techniquement, nous pourrions maintenant modifier les noms de
ces variables, donc elles ne sont pas exactement les mêmes, mais ce n'est pas la solution la
plus correcte. solution la plus correcte
dirait simplement que ce nom de propriétaire de point est
égal au nom du propriétaire et que ces planchers de
points équivaut à la force. Que se passe-t-il réellement ici ? Eh bien, cela représente
l'objet actuel. Chaque fois que ce constructeur
est dirigé pour ma maison, qui porte le nom
de propriétaire Alex et deux étages. Le, ce mot clé
ici va faire
référence à l'
objet My House ici. Lorsque nous créons la maison de Bob, cet objet
ici va faire référence à l'objet de votre
maison ici même. Le, ce mot-clé
ici va représenter l'objet actuel
utilisé pour cette classe. Pour le prouver dans
notre fonction d'impression, je peux dire que cette
maison est la propriété de. Je pourrais ensuite imprimer
ce nom de propriétaire de points. Et il a plus cette force de plancher de
points. Bien sûr, je vais mettre des parenthèses
autour du S au cas où vous voudriez passer dans
une maison à un seul étage. Maintenant, nous utilisons toujours
cette fonction d'impression, comme vous pouvez le voir ici. Je vais aller de l'avant
et lancer ce programme. Et ici, nous voyons que dans
cette maison
appartient à Alex et elle a deux étages. Nous voyons également que cette maison
appartenait Bob et qu'elle a deux étages. Les noms et le
nombre
d'étages seront enregistrés
localement. Juste ici. Nous n'accédons pas
aux paramètres que nous avons ajoutés ici, car ils sont
rebondis qui ne sont
accessibles que dans le cadre du
constructeur. Nous avons donc
nos propres paramètres ou nos propres variables
au sein de cette classe. Nous
les affectons chaque fois que nous créons l'objet
à partir du constructeur. Ensuite, nous pouvons accéder à
ces variables n'importe où dans cette classe. Par exemple, dans
cette fonction d'impression en indiquant ce
nom de propriétaire de point et ce truc guerres. Maintenant, techniquement
dans ce cas d'utilisation de la fonction d'impression, le, ce mot-clé est facultatif
car par défaut, il
supposera que nous allons utiliser l'instance actuelle
de la classe. Je peux donc aller de l'avant
et les supprimer. Et si je
réexécute ça, ça fonctionnera exactement de la même façon. Techniquement, ce n'est pas une bonne pratique, car le fait de
dire ce .name et les planchers de
bureau indique
très clairement que nous
essayons d'accéder aux variables
stockées dans la classe, mais cela est techniquement facultatif dans ce cas de la fonction
printf. Mais notre constructeur doit
être requis car ils ont les
mêmes noms de variables exacts que notre paramètre. Pour être très clair, quelles valeurs nous
affectons, quelles variables. On peut dire ce
point sur son nom pour faire
référence à notre chaîne
privée locale ici. Et ce point floors
qui font référence notre entier privé local ici. Ensuite, attribuez-les au nom du
propriétaire au périmètre. Et le paramètre des planchers.
33. Encapsulation, abstraction, Getters et Setters: Plongeant plus loin dans la programmation
orientée objet, nous allons maintenant
introduire deux autres concepts qui vont devenir
un peu plus déroutants, mais j'espère pouvoir les expliquer assez
bien pour que vous puissiez
pleinement comprendre. Ces deux concepts
vont être connus sous le nom encapsulation
et d'obstraction. Mais nous
examinons également les getters et les setters, qui sont en quelque sorte un
exemple d'abstraction. L'encapsulation
sera
essentiellement un concept de programmation
orientée objet lequel nous voulons que toutes
nos fonctionnalités soient encapsulées en
un seul endroit. Et même une classe elle-même
est un exemple
d'encapsulation. Par exemple, nous
avons ici une classe de maison. Donc, toutes les fonctionnalités que nous aurons concernant une maison, telles que le nombre de portes, le
nombre d'étages qu' elle possède, différentes fenêtres et pièces
et d'autres choses du genre. En gros, tout ce qui a
trait à une maison doit être enfermé ou encapsulé
à l'intérieur de cette classe de maison. Maintenant, un autre concept est quelque chose comme un médicament
ou une pilule où toutes les fonctionnalités
sont encapsulées à l'intérieur
d'une seule pilule. Cela signifie que les utilisateurs de ce cours ou les personnes qui
prennent le médicament n'ont pas nécessairement à connaître le fonctionnement intérieur, tout. Il suffit de voir
l'objet extérieur et savoir que tout est
encapsulé à l'intérieur. C'est plutôt un
concept qui ne peut pas vraiment
être démontré clairement, mais il est important de
comprendre
que lorsque vous
écrivez votre propre code Java, vous voulez que tout soit capsulé à l'intérieur
de sa propre classe. Maintenant, le concept suivant
est l'abstraction, qui ressemble légèrement
à l'encapsulation. Mais en gros, cela
signifie que vous voulez
uniquement que l'utilisateur qui utilise la classe ait
accès aux éléments dont
il a réellement besoin. Par exemple, je vais changer ces propriétés privées
ici pour devenir publiques. Et je vais expliquer ce qui est
privé ou public dans cette vidéo. Mais pour l'instant, il suffit de suivre et de les transformer en public. Et maintenant, à l'intérieur de notre dossier principal, après avoir créé la première maison, mais avant de l'imprimer, je peux dire mon point de maison. Nous avons maintenant accès à toutes les propriétés et
méthodes de cette classe. Et nous pouvons voir le
nom du propriétaire et les étages. Je peux changer le nom du
propriétaire en Bob. Disons que Bob vient de détourner
ma maison, par exemple. Et si je fais ça, nous
voyons maintenant Bob deux fois dans le causal, comme nous le voyons ici. Il s'agit maintenant
d'une mauvaise pratique techniquement. Et je vais
retransformer ces variables en privées en utilisant Control Z ou
Command Z sur un Mac. Et maintenant, nous voyons un problème
connexe. Si je survole ici, il est dit que le nom du propriétaire a un accès privé à l'intérieur de com dot usé off
keys dot house. Je vais donc supprimer cette
ligne de code ici. Et maintenant, nous ne pouvons pas accéder
directement à qui appartient la maison sans
être réellement à l'intérieur de la maison. Par exemple, je pourrais dire que
ce nom de point est égal à Bob, et cela fonctionnerait très bien. Et c'est parce que la
propriété privée ici est connue sous le nom de modificateur
d'accès. Cela va
restreindre l'accès de
certaines choses lorsqu'il s'agit de différentes propriétés
et méthodes. Dans ce cas, une méthode privée ou une
propriété privée signifiera
que la
seule chose qui puisse y accéder ce sont des objets de
la même classe exacte. C'est pourquoi nous sommes
en mesure d'y accéder
ici , ainsi qu'ici. Même si c'est privé, nous sommes toujours à l'intérieur de la classe. C'est aussi la raison pour laquelle nous avons eu
l'erreur ici. Ce que j'essaie d'y
accéder parce que ne
sommes pas à l'intérieur de
la classe de la maison. Nous sommes à l'intérieur de la classe de cours
Warnock Keys ou quel que soit le
nom que vous avez donné à votre classe. Maintenant, le public, comme vous
pouvez probablement le deviner, signifie que tout peut
y accéder en accédant à son propre objet. Par exemple, nous avons
une impression publique vide. Cette méthode est publique, qui signifie que si nous avons un
objet pour cette classe, par exemple, ma
maison ou votre maison, nous pouvons accéder à la méthode d'
impression qui s'y trouve. Maintenant, vous vous
demandez peut-être pourquoi ne pas accéder
directement à
tout ce que nous voulons. Pourquoi restreindre certains accès ? Eh bien, c'est
tout le concept derrière l'
abstraction qui va
essentiellement prendre toutes les fonctionnalités intérieures
et le fonctionnement de la maison et ne vous donner accès qu'à ce qui est nécessaire pour que la Maison
accomplir son travail. Maintenant, dans certaines situations, vous pouvez donner un accès intérieur à certaines choses à l'aide de
getters et de setters, certaines choses à l'aide de
getters et de setters,
que nous
examinerons ici dans un instant. Mais généralement, en
règle générale, vous ne devez donner accès qu' à ce qui est absolument nécessaire. Et vous ne devez jamais
donner un accès direct à des variables comme celle-ci directement. Au lieu de cela, vous devez toujours
utiliser des getters et des setters. Examinons rapidement comment cela fonctionne. Je peux dire public, ficelle. Maintenant, il va
remplir automatiquement
le concept de get owner name, qui est en fait ce que
je vais utiliser ici. La raison pour laquelle je le savais, c'est parce qu'elle va
renvoyer une chaîne. Et chaque fois que je tape Git, il va
supposer que c'est créer quelque chose connu sous le
nom de méthode getter. Fondamentalement,
il s'agit simplement d'une méthode qui renvoie une propriété privée. Dans ce cas, je peux
renvoyer le nom du propriétaire. Maintenant, je peux
accéder au nom du propriétaire qui est privé à partir de
cette méthode getter. Nous avons également des méthodes de setter, ce qui est un concept similaire, mais évidemment, nous
n'en avons pas la valeur. Au lieu de cela, nous étudions
la valeur, comme je l'ai dit, vide
public parce que nous
ne retournons rien. Définissez le nom du propriétaire ici. Il va y avoir
un seul paramètre. Je peux dire le nom du propriétaire de la chaîne. Et puis à l'intérieur de cela, je peux dire que ce nom de propriétaire de point est
égal au nom du propriétaire. Maintenant, si je le voulais, je peux aller chez moi, comme je l'ai dit, nom du propriétaire de
mon ensemble de points de maison. Je peux passer à Joe. Et si je fais ça, on verra Joe
et Bob dans la console. Et en fait, nous voyons
Bob deux fois à cause d' une erreur que j'ai commise ici dans
la fonction d'impression. À titre d'exemple, j'ai dit
que nous pouvons utiliser cela ici. Je vais aller de l'avant
et supprimer cela ,
puis lancer le
programme une fois de plus. Et maintenant, nous voyons Joe et
Bob dans la console. Il s'agit d'un exemple de méthode
getter et
de méthode setter. Maintenant, vous vous
demandez peut-être pourquoi vous embêter avec l'un de ces
getters et setters. Pourquoi ne pas simplement supprimer complètement ces fonctions ici et simplement
rendre nos propriétés publiques ? Lorsque j'apprenais la programmation orientée
objet pour la première fois, j'avais la
même question exacte et j'étais très confus. Pourquoi faire tout ce travail supplémentaire et pour obtenir les
mêmes résultats exacts. Mais en écrivant de plus en
plus de code au fil des ans, je me suis rendu compte que l'utilisation de getters
et de setters est beaucoup plus pratique et cela rend
les choses beaucoup plus organisées. Imaginez, par exemple,
que nous ayons un très grand projet
avec des dizaines de maisons. Oliver, notre projet,
et nous voulons changer tous les noms des propriétaires en majuscules. Ou bien, nous voulons consigner
tous les noms des propriétaires chaque fois qu'ils sont modifiés
ou quoi que ce soit de ce genre. Je souhaite effectuer un certain type de fonctionnalité chaque fois que le nom du
propriétaire a changé. Par exemple, nous pouvons dire ici que ce nom de propriétaire est égal au nom du
propriétaire point ToupperCase. Et pour rendre les choses
encore plus pratiques, nous pouvons modifier une ligne dix
ici de ce nom de propriétaire égale à nom pour définir le nom du propriétaire. Transmission du nom du propriétaire. Cela arrivera
au constructeur par défaut aura également une majuscule. Si je lance ça, nous devrions voir à la fois sur nos noms et en majuscules. Et si nous avions tout mis en public sans aucun
getters ni setters, et que nous avions des dizaines de maisons
dans un projet plus vaste, nous devrions
passer en revue et
changer manuellement tous nos
noms en majuscules, ce qui semble très fastidieux
et très ennuyeux. Mais parce que nous utilisons
les règles d'
abstraction correctes et que nous
utilisons des getters et des setters avec des
propriétés privées ici. Nous avons maintenant la possibilité
de modifier facilement certains aspects de notre programme à partir d'un seul
changement ici.
34. Héritage: Jetons un coup d'œil à quelque chose
connu sous le nom d'héritage. C'est essentiellement
là que nous pouvons ajouter ou étendre une autre classe pour
lui donner plus de fonctionnalités. Par exemple, je peux faire un nouveau cours Java et je
vais appeler cet hôtel. Et je vais agrandir la maison. Comme je l'ai dit, étend la maison. Cela signifie qu'
il va hériter de
toutes les fonctionnalités
de la classe de maison. Mais ensuite, nous pouvons ajouter plus de
fonctionnalités et de côté. Par exemple, nous pouvons maintenant spécifier superficie
d'un lobbyiste, ou le nombre d'employés, ce genre de
choses, que l'hôtel n'a pas de
maison, mais une maison va toujours
avoir un propriétaire et un certain nombre d'étages
dont dispose également un hôtel. Au lieu de faire une classe hôtelière, qui aurait ces
propriétés à l'intérieur, nous allons simplement agrandir la maison qui possède déjà
ces propriétés. De cette façon, nous n'avons pas
à les refaire. Mais nous obtenons
cette erreur ici. Si je le survole,
il
est dit qu'il n'y a pas de
constructeur par défaut disponible. Si nous passons à la maison, nous voyons qu'il n'y a pas de constructeur
par défaut, ce qui
signifie qu'aucun constructeur
n'
a de paramètres 0. Nous avons donc ces deux
paramètres ici, le nom du propriétaire et les étages. Et cela signifie que notre hôtel, qui s'étend à la maison,
doit également avoir un constructeur
similaire. Je peux donc dire public, hôtel, chaîne, nom du propriétaire,
puis int étages. Maintenant, nous obtenons une autre erreur. Si je survole cela, il est dit qu' il n'y a pas de
constructeur par défaut disponible. Cela signifie que nous
devons utiliser quelque chose connu sous le nom de super méthode. Donc, si j'appelle des super-héros, je pourrais passer le nom du
propriétaire et les planchers. Et la super fonction
ne sera
utilisée que dans les classes qui
étendent une autre classe. Cela va simplement
appeler le constructeur de la classe que nous étendons
dans cette maison de cas. Nous avons donc créé
un constructeur hôtelier. Cela va
appeler un constructeur de la maison. Par conséquent, nous allons
définir les propriétés privées nom
du propriétaire et des étages égales aux propriétés que
nous passons. Dans ce cas, nous allons
simplement
passer ceux et ceux du constructeur de
l'hôtel. Maintenant, si cela semble
déroutant, ne vous inquiétez pas, allons de l'avant et créons
une nouvelle instance hôtelière, et cela aura beaucoup
plus de sens après cela. Ici, dans notre classe principale, je vais dire hôtel. Mon hôtel est égal à un nouvel hôtel. Nous pouvons ensuite passer chez le propriétaire. Et puis le nombre de
planchers, disons dix. Je peux maintenant imprimer le nom du propriétaire de mon point d'
hôtel. Mais à l'intérieur de la classe hôtelière, nous n'avons pas du tout de nom de
propriétaire. C'est parce que nous continuons
d'étendre la classe house, hérite de toutes les
fonctionnalités précédentes de cette classe. Par exemple, obtenez le nom du propriétaire. Donc, bien sûr,
si je
devais exécuter ça, il suffit d'imprimer
Alex sur la console. Je ne vais pas vous ennuyer
avec ce concept simple. Je suis sûr que vous comprenez cela. Mais examinons plus en détail le fonctionnement ces constructeurs et le
fonctionnement de la super méthode. En gros, je passe
ALEKS et l'étain comme paramètres dans le constructeur de l'
hôtel. Par conséquent, le
nom du propriétaire et les étages
seront Alex et dix appellent
ensuite super, ce qui va
appeler le constructeur de la classe étendue. Dans ce cas, c'est la maison. Essentiellement, nous allons
appeler cette fonction ici, qui les attribuera à propriétés
privées
égales à Alex et dix. Nous pouvons maintenant y accéder à l'
hôtel s'ils sont publics ou quelque chose qui
est connu sous le nom de protection. Jusqu'à présent, nous avons vu des
sujets privés et publics. Il y en avait également
un autre qui est protégé. Par exemple, à
l'intérieur du constructeur. Je ne peux pas imprimer
ce nom de propriétaire. Nous voyons dans la liste déroulante ici qu'il n'
y a pas d'option. Et aussi si je laisse ça comme ça, on va
avoir une erreur. Si je survole cela, le nom du propriétaire a un accès privé. C'est parce que l'accès
privé signifie que
les seules choses directement dans
cette classe peuvent y accéder. Ce n'est pas nécessairement des choses
qui étendent cette classe. Si nous voulions que les
classes étendues y aient accès, nous pouvons changer de niveau privé
pour le protéger. Maintenant, l'erreur disparaît et protéger
signifie essentiellement que tout ce qui dans la classe peut l'
utiliser ainsi toutes les classes qui étendent
cette classe peuvent l'utiliser.
35. Polymorphisme: Parlons maintenant d'un concept
connu sous le nom de polymorphisme. C'est essentiellement quelque chose
qui signifie beaucoup de formes parce que poly signifie beaucoup
et le morphisme signifie formes. Examiner le problème
que le polymorphisme résout. Ici, nous avons l'objet de mon
hôtel ainsi que votre objet maison
et mon objet de maison. Ces deux-là utilisent
la fonction d'impression. Et comme l'hôtel
agrandit la maison, nous avons maintenant accès à
la fonction d'impression. Je peux dire l'empreinte de mon hôtel. Maintenant, si je dirige ça, nous voyons que les maisons
appartenant à chaque personne et qu'elles
ont tellement d'étages. L'hôtel est toujours
dit que les maisons appartenaient. Nous voulons essentiellement remplacer la fonctionnalité exacte de la fonction d'impression
au
sein de la classe hôtelière. Pour ce faire, jetons un coup d'œil à la classe de maison très rapidement. Notre impression fonctionne
comme une impression publique vide. Notre classe hôtelière doit avoir
la même fonction exacte. Je peux dire public, nul, imprimé. Et maintenant, pour plus de simplicité, je vais simplement copier et coller la ligne
précédente ici. Je peux utiliser Control C sous
Windows ou Command C sur Mac. Ensuite, je peux utiliser le
contrôle V sous Windows
ou Command V sur Mac. Nous obtenons maintenant une erreur car ces deux propriétés sont privées et
ne sont pas protégées. Je dois donc utiliser leurs getters
correspondants. Je pourrais donc dire obtenir le nom du propriétaire. Nous n'avons pas encore de cadeau
pour sa méthode. Donc, si je dis « git floors », il n'existe pas vraiment. De plus, allez-y et faites-en un. Il devrait y avoir assez simple, je suppose qu'un public
intègre Flores ici, je peux simplement retourner faux. Nous avons donc maintenant un getter
que nous pouvons utiliser. Dans l'hôtel. Nous n'
avons plus d'erreur ici. Nous pouvons changer. La maison appartient à deux, l'hôtel est impartial. Maintenant, si je fais ça et
que nous regardons notre console, nous voyons
ici que l'hôtel
appartient à Alex et
qu'il a dix étages, ou les
objets de la maison précédents disent toujours maison. C'est ce qu'est le polymorphisme, c'est que nous avons de nombreuses formes de
la même fonction exacte. Nous avons donc ici une
fonction d'impression dans notre maison, et ici nous avons une
fonction printf dans notre hôtel. Chaque fois que nous essayons d'
accéder à une fonction d'impression, nous allons toujours utiliser la fonction la plus proche de la classe exacte. Par exemple, maintenant que nous avons cette fonction printf,
elle va l'utiliser. Mais avant, il
ne l'avait pas. Il s'agirait donc de la
classe de la maison que nous étendons. Et bien sûr, House avait
une fonction printf. Il utiliserait donc cela. Aujourd'hui, c'est également connu sous le nom de concept
d'écrasement de méthodes. Maintenant, cela ne doit pas être confondu avec la surcharge de
méthode. C'est ici que nous avons deux
méthodes du même nom exact, mais peut-être des
paramètres différents. Par exemple, je peux
dire public, void, print, et comme argument,
je peux dire int times. Ici, je vais
parcourir un certain nombre de fois en fonction du
nombre de fois qui est passé. Je peux dire que pour int a est égal à 0, alors que a est inférieur à
fois plus a. Maintenant ici, je peux simplement copier et coller cette
ligne ici, ou je peux simplement
appeler la fonction d'impression. Maintenant, en revenant
à notre classe principale, nous imprimons simplement ceci, mais nous pouvons aussi dire l'impression de
points de mon hôtel et passer en cinq. Et maintenant, je peux gérer ça. Et nous voyons ici qu'il est imprimé
cinq fois différentes. Bien sûr, nous voyons
cinq fois ici. Mais nous avons également cette
sixième fois au sommet. Et c'est parce que nous disons
ici empreinte de
mon hôtel sans
aucun argument réel. Il va donc utiliser la
fonction printf normale que nous avons créée. Maintenant, nous avons déjà passé en
revue la surcharge de méthode. Ce n'est pas vraiment un rafraîchissement. Cela vise simplement à
préciser que le
remplacement de la méthode est
différent de la surcharge de méthode. De toute évidence, ils peuvent être confondus parce qu'il y a des mots similaires, mais ce sont des
concepts différents comme vous pouvez le voir ici.
36. Le mot-clef « statique »: Jusqu'à présent, nous avons différentes
propriétés au sein de nos classes, par
exemple le
nom du propriétaire et les étages. Et ceux-ci seront liés
à chaque objet
que nous créons. Par exemple, ma maison, votre maison et mon hôtel. Je ne vais pas
introduire un nouveau mot-clé, qui est le mot-clé statique, que vous pouvez voir ici. Cela
ne va fondamentalement pas lier les propriétés aux objets
individuels, mais plutôt les liens entre
les propriétés et la classe elle-même. Maintenant, chaque
maison est différente, il m'est
donc difficile de décrire un exemple statique en
ce qui concerne les maisons. Nous allons donc
utiliser des oiseaux à la place. Je peux cliquer avec le bouton droit sur la
nouvelle classe Java. Et je vais
nommer ça un oiseau. Disons maintenant que chaque oiseau aura son propre nom. Je peux donc dire type de
chaîne privée. Et puis ici, je peux dire oiseau
public chez un constructeur, on peut avoir une chaîne
ici appelée type. Ensuite, dans le
constructeur, nous pouvons attribuer le type de variable locale égal aux paramètres transmis
par le constructeur. Ici, je peux dire que ce type de
point est égal au type. Tout semble
assez basique jusqu'à présent, allons dans ma classe principale et je vais les commenter. Nous les décommenterons dans les prochaines vidéos lorsque nous
reviendrons à l'exemple de la maison. Mais encore une fois, la statique est beaucoup
plus facile à comprendre et à expliquer
sans utiliser de maisons. Ici, je peux dire oiseau,
oiseau est égal à un nouvel oiseau. J'ai accès à un oiseau, mais maintenant j'ai le laissez-passer
dans un certain type. Par exemple, je peux
passer dans un corbeau, et maintenant nous avons
accès à un oiseau. présent, tout semble assez
standard. Désormais, les propriétés statiques
telles que les variables et les méthodes arrivent une fois que vous voulez faire rebondir
quelque chose
dans la classe elle-même. Comme je l'ai mentionné, la maison porte le nom du propriétaire
et les étages liés à chaque objet créé à partir de cette classe de maison. Donc, dans notre dossier principal,
nous avons ma maison, qui va l'avoir sur les propriétés du
nom du propriétaire et des étages. Et ensuite, votre maison
aura différentes propriétés, également appelées ancien
nom et étages. Et mon hôtel a eu la même chose car cela prolonge la classe
de la maison. Mais si je vais dans Bird ici, je peux créer quelque chose
connu sous le nom de variable statique. Comme je l'ai dit, les ailes publiques, statiques, int sont égales à deux. Maintenant, si je retourne dans
mon dossier principal ici, lorsque je vais accéder aux ailes d'oiseaux, nous voyons qu'il n'existe pas
réellement. C'est parce que encore une fois,
les variables statiques
ne sont pas liées à l'oiseau
des objets lui-même. L'objet est cet objet
que nous avons créé ici. Au lieu de cela, ils sont liés
à la classe réelle. Donc, des ailes d'oiseaux. Donc maintenant, si je dirige ça, nous allons voir la quantité d'ailes dans cette cabane à oiseaux. Dans ce cas, il s'agit de deux. Mais pourquoi utiliser la statique ici au lieu de simplement créer
une variable normale ? Parce que cela n'est
créé qu'une seule fois. Sinon,
par exemple, avec un type de chaîne, cette variable
est créée ici chaque fois que
nous créons une nouvelle instance
de notre classe Bird. Pour revenir à l'exemple de la maison, nous avons trois
instances différentes de nom de propriétaire et étages, car nous n'avons pas trois objets différents
qui vont les utiliser. Mais si j'avais trois oiseaux
différents, nous n'aurions encore qu'
un seul entier appelé ailes. Par conséquent, des variables statiques comme
celle-ci seront utilisées chaque fois que vous avez une classe qui dispose d'une information
partagée. Par exemple, les oiseaux ont deux ailes et cela
ne changera jamais. avoir comme
variables locales telles que ailes int
privées équivaut à deux. Cela n'a pas trop de sens car cela ne
changera jamais. Par conséquent, nous
n'avons pas besoin d'avoir une variable d'ailes liée à chaque
objet que nous créons. Au lieu de
cela, nous pouvons simplement l'attacher directement à la classe. Maintenant, nous pouvons également avoir des méthodes
statiques. Je peux dire public, statique,
int, obtenir des ailes par exemple. Ici, nous pouvons
simplement retourner des ailes. Désormais, les méthodes statiques ne seront utilisées
que lorsque vous essayez accéder
à des variables statiques ou d'utiliser des
variables statiques ou à un type de fonctionnalité ou pour renvoyer éléments tels qu'un simple
getter ici. Maintenant, dans ma classe principale, je ne peux pas imprimer les ailes d'
oiseau. Et bien sûr, cela
aura le même résultat car nous
retournons simplement la même variable, mais semblable à la variable
oiseau dot get wings n'existe pas réellement. Car encore une fois, les propriétés statiques et les méthodes statiques sont
liées à la classe non à l'objet
créé à partir de la classe.
37. Cours abstraits: Jusqu'à présent, nous avons
regardé les cours normaux, comme notre maison, notre oiseau et nos classes hôtelières. Mais maintenant, nous allons jeter un coup d'
œil à ce que l'on appelle des classes abstraites. Il s'agit d'un
type de classe différent que nous ne pouvons pas utiliser directement. Par exemple, si je vais
à mon cours d'oiseaux et que je fais de ce cours un cours
abstrait public, rien ne se passe directement ici. Tout semble normal. Mais si nous revenons
à notre fichier principal, nous avons
ici une erreur
car nous ne pouvons pas utiliser
directement des classes abstraites. Il s'agit de classes
conçues pour
être utilisées uniquement avec des classes
qui les étendent. Par exemple, ici, je peux faire un nouveau cours et je vais
appeler ça un corbeau. Cela va
prolonger la classe des oiseaux. Prolonge Bird. Et maintenant, nous devons créer
notre propre constructeur car nous avons ici un
constructeur autre que par défaut. Je peux donc dire que le public grandit le paramètre étant exactement
le même que l'oiseau. Donc, type de chaîne, comme nous
pouvons le voir ici, en
revenant dans notre classe CHRO, nous pouvons appeler cette super
fonction passant en type. Maintenant, toutes les flèches
devraient disparaître. Si nous revenons dans
notre classe principale. Et au lieu d'utiliser directement
bird, je vais maintenant dire cro, gro est égal à un nouveau CRO. Maintenant, nous avons accès à cela et nous avions encore eu cette
passe dans une chaîne. Dans ce cas, nous allons
passer au nom du Corbeau. Et techniquement, c'est un oiseau
parce que Cro étend Bird. Mais pourquoi voudriez-vous avoir une classe abstraite qui
doit être étendue ? Nous ne pouvons pas utiliser cela directement. C'est là que
le concept de fonctions
abstraites entre en jeu. Par exemple, ici, je peux
dire « abstrait public », « vide ». Je peux appeler ça Singh. Et je n'
inclurai aucun corps fonctionnel. Si je devais le faire,
nous avons une erreur. Si je survole cela
et maintenant, il est dit que méthodes
abstraites
ne peuvent pas avoir de pot. Je
vais donc simplement créer la déclaration d'une fonction, mais aucun corps n'y est
attaché. Maintenant que chaque classe avait des étendues, la classe d'oiseaux est obligée d'
étendre cette fonction sinc. Si je retourne à un corbeau, nous avons
ici une erreur. Si je le survole, il est dit que
la classe Crow doit être déclarée abstraite ou implémenter
les méthodes abstraites. En voyant ici Bert, je peux
dire public, nul, chanter. Je peux ensuite imprimer un son
qu'un corbeau pourrait produire. Par exemple, ceci. Maintenant, si je retourne
dans mon dossier principal, je peux maintenant dire Crow dot sin. Et si je l'exécute,
nous
verrons alors que cela nous a été
imprimé sur la console. Disons que j'ai
un autre cours ici. Je vais appeler ça un Robin. Je peux avoir cet oiseau étendu. Nous pouvons donc créer notre
propre constructeur. Donc Robin public, type de chaîne. Ensuite, nous pouvons passer ces deux super méthodes que nous appellerons
le constructeur d'oiseau. Maintenant, nous devons encore remplacer
la méthode ToString. Vide public, chantez. Ici, je vais
imprimer un tweet, tweeter. Et maintenant, je peux faire un
exemple de Robin en disant que
Robin est égal à nouveau Robin, en
passant par Robin ici. Et puis je peux maintenant
dire Robin point péché. Si je fais ça,
on verra les deux sons différents
que les oiseaux vont faire. Et cela est utile car la classe d'oiseaux est
une classe abstraite, ce qui signifie qu'elle a beaucoup de configuration, mais elle n'est pas destinée
à être utilisée directement. Il est destiné à être utilisé
avec d'autres classes qui auront une fonctionnalité
spécifique. Par exemple, chaque oiseau peut produire un bruit légèrement différent. Nous voulons donc
forcer chaque type d' oiseau à implémenter directement cette
fonctionnalité.
38. Interfaces: Jetons maintenant un coup d'
œil aux interfaces, qui ont des
concepts similaires à ceux des classes abstraites, qu'il
suffit d'examiner. Mais ils présentent des différences
majeures. Par exemple, nous avons ici
une classe abstraite d'oiseaux. Et les classes abstraites
ont généralement des choses normales dans les classes, par
exemple différentes
méthodes et variables. Cependant, nous allons
généralement avoir une fonction abstraite que toute classe
qui étend la classe d'oiseaux
est obligée d'implémenter. Nous avons regardé
cela dans la dernière vidéo avec notre classe CRO et Robin, où nous devons maintenant
remplacer la méthode de chant. Maintenant, il faut garder à
l'esprit que chaque classe en Java ne peut étendre qu'
une autre classe, mais nous pouvons utiliser autant d'
interfaces que nous le voulons. Par exemple, dans mon projet, je vais créer
une nouvelle classe Java. Et je vais
changer cela par une interface ici. Et je vais
nommer cet animal. Maintenant, au sein de cet animal, nous ne pouvons pas avoir de constructeur, par
exemple un animal public. Cela va provoquer une erreur. Les seules méthodes que nous pouvons avoir ici sont des méthodes abstraites. Disons que je veux que ma classe Robin et Cro implémente
cette interface animale. Cela signifie également que tous les
animaux que je fabriquerai à l'avenir, qu'il
s'agisse de vaches, de chiens, de
serpents, n'importe quoi
devra être mis en œuvre. Cela ne devrait donc
contenir que des choses spécifiques à un seul animal, exemple public int, durée de vie
moyenne. Et encore une fois, ces méthodes vont
être abstraites. Je ne peux donc pas écrire un corps de fonction
réel ici car encore une fois,
c'est une interface. Nous ne pouvons avoir que des
fonctions elles-mêmes. Mais si je vais en classe micro, par
exemple, je peux faire de
cet instrument un animal. Maintenant, nous obtenons une erreur. Si je survole cela, il est dit que classe Corbeau doit
soit être déclarée abstraite, soit implémenter la
durée de vie moyenne de la méthode abstraite chez l'animal. Ici, je peux dire public sur
la durée de vie moyenne. Et ça va
en revenir huit. Maintenant, nous ne recevons plus
d'erreur nulle part. Je vais voir mon Robin, je peux maintenant dire des outils animaux. Nous devrions faire exactement la
même chose. Int public, durée de vie moyenne. Ici, je peux y retourner. Maintenant, je peux revenir dans
mon fichier principal et je peux imprimer la durée de vie
moyenne des points de croissance, et je peux imprimer la durée de vie moyenne de Robin
Dot. Par course, nous
en verrons 82 respectivement. Et vous pensez peut-être que nous pouvons réaliser ce même concept
exact en ajoutant
simplement à la fonction
une méthode abstraite
à notre classe Bird. Et c'est vrai. Et après les classes sont similaires
aux interfaces à certains égards. Mais la principale différence
ici est que vous voudrez généralement
utiliser une interface lorsque vous n'avez que fonctions
abstraites et que vous n'avez aucun autre
type de fonctions. Et l'une des principales différences ici, comme je l'ai déjà mentionné, est que nous pouvons implémenter autant d'
interfaces différentes que nous le voulons. Par exemple, si j'avais une autre
interface appelée animal to, je pourrais l'implémenter ici. Ils sont séparés par des virgules, mais en Java, nous ne pouvons
étendre qu'une seule classe. L'un des avantages
des interfaces
est donc que vous pouvez en utiliser
autant que possible. Par conséquent, vous
souhaitez généralement utiliser des interfaces à
moins qu'il soit logique d'utiliser une classe. Par exemple, vous disposez de fonctionnalités
par défaut qui doivent être héritées ou techniquement étendues par
chaque classe enfant. Mais sinon, si vous n'
avez que ces fonctions ici, que chaque classe
enfant individuelle, telle que Robin et Cro, devrait réellement se substituer
et s'implémenter, alors vous devez
utiliser une interface.
39. Instance de: Que se passe-t-il si vous
vouliez vérifier certains types de classes par rapport à d'autres
types de classes ? Par exemple, je vais
commencer le code que j'ai laissé
dans la dernière vidéo, mais je vais me débarrasser de toutes les
déclarations imprimées ici. Nous venons d'avoir un
corbeau et un robin. Je ne peux pas avoir de
déclaration si un corbeau est une instance d'oiseau, je peux imprimer Corbeau est un oiseau. Et ici, nous recevons cet avertissement. Si je le survole,
il est dit que l'incidence de la
croissance conditionnée des
oiseaux est toujours vraie. C'est parce que cette ligne
ici n'est qu'une variable
que nous avons créée, mais nous ne la
modifierons jamais du tout. Il sait avec certitude qu'il s'
agit d'un exemple d'oiseau car le cro étend Bird
comme nous le voyons ici. Bien sûr, si je dirige
ça, c'est co-investir, disons qu'un corbeau est un oiseau,
comme nous le voyons ici. Mais cela peut également être
fait avec des interfaces. Un corbeau est donc un
exemple d'animal. Maintenant, si je fais ça,
nous obtiendrons la même réponse exacte que celle
que nous voyons ici. Bien sûr, techniquement, nous devrions modifier la
phrase pour dire qu' un corbeau est un animal.
Mais vous avez l'idée. L'instance de peut être utile
si nous voulions vérifier si un objet donné est une instance
d'une autre classe
ou d'une interface. Et il s'agit
d'un cas d'utilisation supplémentaire pour les interfaces car
techniquement, vous n'avez pas forcément besoin d'
avoir quelque chose à l'intérieur de votre interface et
cela fonctionnera toujours. Par exemple, un Robin est
toujours en train de mettre en œuvre un animal, et le CRO met
toujours en œuvre durée de vie moyenne de l'
animal devient
maintenant une méthode normale
qui est rattachée à la classe du corbeau et rattachés respectivement à la
classe Robin. Et n'a rien à voir avec
l'interface animal. Mais maintenant qu'un Robin et un CRO sont tous deux des animaux car nous sommes toujours en train d'implémenter
l'interface. Nous pouvons toujours les utiliser
et des vérifications comme celui-ci.
40. Enums: Nous allons maintenant nous
éloigner de programmation orientée
objet et passer à d'autres
aspects de Java. Par exemple, dans cette vidéo, nous allons
en apprendre davantage sur les énumérations, est-à-dire les énumérations. Fondamentalement, il s'agit de types de
valeurs
spécifiques qui ressemblent à
des variables, mais elles ne peuvent pas changer et elles peuvent être utilisées de manière très
spécifique. Alors, allons-y et
créons un nouveau dossier ici. Nous pouvons donc sélectionner la classe Java. Ensuite, nous pouvons sélectionner enum. Je vais appeler
ces jours de la semaine. Vous pouvez avoir des énumérations pour avoir
toutes les valeurs que vous voulez. Mais en général, ce
sont des choses qui ne devraient jamais changer. Ils ne sont donc pas techniquement comme une variable dans laquelle vous pourriez avoir entrée d'un utilisateur ou un certain
type de nombre aléatoire. Ce sont des choses qui
seront concrètes et qui seront toujours utilisées de
la même manière. Un bon exemple de cela
est celui des jours de la semaine, qui ne changeront pas. Ici, je vais ajouter
une virgule du dimanche. J'ai remarqué comment je tapais
en majuscules. Il s'agit d'une convention courante
lorsque vous utilisez réellement des énumérations. Nous pourrons donc avoir
lundi, mardi, mercredi, jeudi,
vendredi et samedi. De toute évidence, vous épelez correctement. Nous avons maintenant ces sept
valeurs différentes dans notre énumération, mais comment
les utiliser réellement et comment sont-elles utiles ? Donc, en revenant dans
notre dossier principal,
je peux dire les points des jours de la semaine. Et ensuite, je peux accéder à chaque valeur individuelle
si je le voulais. Ou je peux tous les obtenir sous forme de
tableau. Ici, nous voyons que la
méthode des valeurs est intégrée dans des énumérations et qu'elle renvoie
des jours de la semaine sous forme de tableau. Mais par exemple, si je
voulais imprimer les jours de la semaine vendredi,
je peux alors exécuter ça. Nous voyons ici vendredi
dans la console. Nous pouvons également les utiliser
avec des instructions if. Maintenant, chaque valeur d'énumération individuelle possède
également un ensemble de méthodes
différentes. Par exemple, nous
pouvons le comparer à un autre exemple de jours par semaine. Nous pouvons obtenir le nom, nous pouvons obtenir l'ordinal à moins de
regarder rapidement ces deux choses. Je suis donc allé imprimer le nom. Ensuite, je vais copier
et coller cette ligne. Et je vais
imprimer l'ordinal. Maintenant, si je lance ça ici, on revoit vendredi, et alors 55 sera l'indice réel
que cela sera utilisé. Par exemple, le dimanche vaut 0. Maintenant, vous n'avez pas à
ajouter ces commentaires, je le fais simplement
pour que nous puissions lire cela plus facilement . Nous avons donc ici 012345, et bien sûr samedi
serait six, mais c'est pourquoi nous en voyons
cinq et notre console. Je vais me
débarrasser de tout ça. Et maintenant,
élargissons cette énumération. Par exemple,
supposons que je ne veux pas que Friday soit en majuscules, mais plutôt que je souhaite réécrire une chaîne spécifique en tant que
nom de ce jour-là. Si semblable aux classes, les enums peuvent réellement avoir
leur propre constructeur. Je vais mettre un point-virgule à la fin de toutes mes valeurs dans ce cas, j'ai eu un samedi. Et ensuite, je peux
dire les jours de la semaine. Maintenant, vous
remarquerez peut-être que je n'ai ni
public ni privé ni
quoi que ce soit de ce genre ici. C'est parce que si je
survole cette erreur, il est dit que le modificateur public n'est
pas autorisé ici. La raison en est que cette fonction
constructeur ne peut être exécutée que
dans l'énumération elle-même. Par exemple, entre parenthèses du
dimanche. Ici, nous transmettions différents arguments
dans le constructeur. Nous ne pouvons pas accéder à
ce constructeur en dehors de ce fichier eNode. Mais pourquoi aurait-on besoin d'un
constructeur en premier lieu ? Eh bien, nous pouvons réellement stocker des valeurs
différentes pour chaque valeur énumérée
individuelle. Semblable aux
propriétés privées d'une classe, je suppose que je dis nom de chaîne privée, je suppose un
booléen privé, Workday. Et puis, au sein du constructeur, je peux avoir besoin de ces
deux propriétés. Donc, nom de chaîne,
booléen, Workday. Ensuite, je peux dire que ce .name est égal nom et que ce point
de travail est égal à jour de travail. Nous obtenons maintenant quelques erreurs
sur chacune de nos valeurs. Et c'est parce que par
défaut, il va appeler un constructeur sans arguments
intégrés. Mais bien sûr, si
je survole ça, il va s'attendre à une
chaîne et à un booléen. Ici. Je peux passer dimanche et ensuite je peux dire faux
parce que c'est une journée de travail. Je vais faire la même
chose pour tout ça. Par exemple, lundi et vrai, comme je le dis mardi et vrai, mercredi et un vrai. Je peux ensuite passer jeudi. Et c'est vrai. Nous avons ici un vendredi et un vrai, puis enfin,
samedi et faux. Maintenant, nous n'avons plus d'erreurs à
moins d'essayer d'utiliser l'
une de ces erreurs dans
notre fichier actuel ici. Au lieu de jours par semaine
, le nom du point Theta dot, puis-je accéder aux
valeurs réelles telles que le jour de la semaine ? Et nous ne pouvons pas, nous devons
en fait faire nos propres résultats
publics pour y parvenir. Ici, je peux dire public,
chaîne GetName. Je peux maintenant renvoyer mon nom. Ensuite, je peux dire que le
booléen public est Workday, et je peux maintenant retourner workday. Getname n'est pas vraiment un
bon nom pour la méthode. La raison en est que cela peut facilement
être mélangé avec le nom. Par exemple, nous avons
name et GetName. On ne sait pas très bien
lequel nous voudrons. Une chose que nous pouvons faire,
c'est que nous pouvons renommer cela pour obtenir le nom d'affichage. Maintenant, un nom complet
comme quelque chose qui sera
généralement affiché aux utilisateurs. Donc quelque chose avec un F
majuscule et des minuscules, tout le reste serait un meilleur nom d'affichage que
tout étant majuscule, tout étant majuscule, ça semble bizarre pour l'utilisateur. Et donc un F majuscule avec
tout en minuscules, c'est en fait comme ça que
tu dirais ça. Normalement, il s'agit
d'un nom d'affichage correct. En revenant au lieu de GetName, je peux maintenant dire le nom d'affichage des enfants. Alors, bien sûr, je vais
dire que le point de vendredi est un jour de travail. Je pense que allez-y et lancez ça. Nous devrions voir le nom complet ainsi que s'il s'agit d'une journée de travail, qui dans ce cas S
a vendredi et vrai. Vous pouvez désormais utiliser
des énumérations comme types de variables. Par exemple, je peux
dire jours de semaine, jour égal à jours de la semaine, lundi. Je peux alors dire que si le
jour est un jour de travail, je peux imprimer pour
aller travailler aujourd'hui. Sinon, je peux
imprimer que c'est un week-end. Maintenant, si je l'exécute, nous
allons travailler aujourd'hui parce que nous
accédions à la valeur Day,
qui équivaut à lundi. Mais bien sûr, si
je change ça pour samedi et que je fais ça, on voit maintenant que c'est un week-end. Maintenant, il y a encore
une chose que je voulais vous montrer avec des énumérations, et c'est la possibilité de les parcourir en
boucle, comme je l'ai dit, quatre
jours par semaine, par jour. Ici, je peux passer des valeurs
de points jours par semaine. Si je survole cela,
nous voyons que cela renvoie un tableau de jours par semaine. Il s'agit d'un tableau de
chaque valeur individuelle en tant qu'élément propre. Ici, je peux
imprimer le point de jour, nous
trouver par nom, puis un deux-points. Ensuite, je peux ajouter que le
jour est Workday. Si je fais ça, ça va passer en boucle tous les jours. Il va imprimer
leur nom
ainsi qu' un booléen s'il s'agit
d'une journée de travail ou non. De toute évidence, avec une
énumération, nous ne recevons
aucune entrée externe provenant d'autres parties du programme. Tout ce qui comporte une
énumération ou un auto-enclos, ce qui
signifie que les arguments sont
passés dans le constructeur ou simplement des valeurs statiques qui
ne sont pas réellement des variables. Comme vous pouvez le voir, je ne
fais que lui passer une chaîne et une valeur booléenne. Je ne
transmets aucune variable. énumérations sont utiles lorsque vous avez quelque chose
comme les jours de la semaine où ils sont concrets et
ne changeront jamais. Même les variables qui passent par le constructeur,
elles ne changeront pas. Cela est très utile
si jamais vous avez choses très
concrètes comme celle-ci, car vous pouvez
facilement y accéder et référencer certaines valeurs sans soucier de leur
évolution constante.
41. Essayez de capturer enfin: Dans une vidéo précédente, lorsque nous utilisons des scanners, nous avons vu à quoi ressemble une erreur. Allons de l'avant et
recréons cela. Je peux créer un scanner. Je l'appelle entrée et je sinus est égal à la valeur
du nouveau scanner. Ici, je peux passer dans System.in. Tout cela devrait
vous
être familier dès le début du cours. Maintenant, je vais
simplement imprimer le point
d'entrée suivant int. Et si je lance ça, il va s'attendre à ce que je
saisisse un entier. Par exemple, si j'entre cinq, tout fonctionne bien
et le processus s'est terminé avec un
code de sortie réussi, qui est 0. Mais si je réexécute ceci et que j' entre dans une chaîne telle que test, nous obtenons maintenant une exception. Il s'agit essentiellement d'une erreur. Et à première vue, cela
peut sembler très déroutant, mais c'est en fait très simple. Fondamentalement, nous avons
une exception dans le thread principal
et il va
avoir une liste d'où viennent toutes
les erreurs. C'est ce qu'on appelle une trace de pile. Et il s'agit essentiellement de suivre exactement d'où vient
l'erreur. Maintenant, ils sont tous
cliquables, et en fait, nous voyons
ici le
nom de l'erreur comme une exception de
non-correspondance d'entrée. Cela se produit lorsque nous saisissons quelque chose qui
n'est pas le bon type. Je peux effectivement cliquer
sur l'un d'entre eux, par
exemple, scanner point Java. Et cela va
ouvrir la peau ou la classe, qui contient un tas de choses
dont nous n'
avons pas à nous soucier. Je
vais en finir avec ça. Mais le plus important, c'est que nous
puissions cliquer sur notre propre code. On peut vraiment
le voir en bleu. Si je ferme tous mes fichiers, je peux cliquer dessus
ici, vais l'ouvrir
et me mettre sur la même ligne exacte
où se trouve l'erreur. Bien, mais comment résoudre
ce problème ? Nous pouvons utiliser quelque chose
connu sous le nom de try-catch. Je vais ajouter
un commentaire ici. Nous avons try-catch et nous
avons également une autre option
connue sous
le nom de finalement, la syntaxe pour cela
serait d'essayer des accolades bouclées, puis vous
devez ajouter une capture. Il va y
avoir une exception. Je vais appeler cela
une exception ici. Et il existe différents
types d'exceptions. En règle générale, vous ne souhaitez pas avoir d'exception générique ici, mais plutôt utiliser le type exact d'exception que vous comptez attraper. Dans ce cas, il s'agit
d'une exception de non-correspondance d'entrée, comme nous pouvons le voir à partir de la trace de
pile ici. Donc, au lieu de simplement
dire exception, je vais dire exception de
non-correspondance d'entrée. Maintenant, ici, je peux dire que je
pointe la trace de pile d'impression. Et cela va
simplement faire exactement
la même chose que celle que nous voyons ici dans notre
console. Pour le prouver, je peux prendre
ces déclarations de lignes imprimées. Je peux le mettre à l'intérieur
du try-catch. Si je fais ça, nous
obtiendrons les mêmes résultats exacts. Si je saisis
quelque chose qui n'est pas un entier,
par exemple, cette chaîne. Nous voyons ici l'erreur exacte. Que
se passe-t-il exactement ici ? Eh bien, en gros, nous allons
essayer ce code ici. Si quelque chose ne fonctionne pas, il va
générer une erreur. Désormais, par défaut, si nous
ne détectons pas d'erreur, le programme va planter. Pour le prouver, je peux ramener
cette ligne ici. Et je vais
commenter notre try-catch pour l'instant. Et pour ce faire avec
plusieurs lignes, il
vous suffit de
les sélectionner toutes, puis de contrôler la barre oblique avant ou la barre oblique de commande
avant sur un Mac. Maintenant, ici, je
vais imprimer travaillé. C'est après que nous ayons
reçu la prochaine entrée int. Si je fais ça, il va me
demander un numéro. Je vais entrer cinq
et ça a fonctionné. Mais si je refais ça
et que j'ai passé le test, ça ne dira pas que ça a fonctionné. C'est parce que le
programme s'est écrasé. Et donc tout ce qui est passé
ne sera pas une rampe. C'est la raison principale pour laquelle
vous souhaitez utiliser try-catch. Parce que si j'imprime a
fonctionné après cela et que j'exécute le programme ici, je peux entrer en test. Et cela va toujours générer
l'erreur car nous l'
imprimons à cause de la ligne 14, de l'
édition, de l'impression de la trace de la pile. Mais il ne va pas
planter le programme. Et nous le voyons
parce que nous
imprimons a fonctionné directement après. Chaque fois que vous disposez d'un code susceptible de déclencher une exception, vous vouliez vous
assurer d'attraper cette exception, puis de la
gérer en conséquence. Dans certains cas, cela
peut être imprimé. Vous n'avez pas saisi de numéro et nous n'avons pas nécessairement
besoin d'imprimer une trace de pile. Je vais donc supprimer ça. Maintenant, si je fais ça et
que je pénètre dans l'intestin, nous ne verrons
pas l'erreur. Au lieu de cela, nous
allons juste le voir. Vous n'avez pas entré de numéro. J'ai enfin parlé de
cette chose. Qu'est-ce que c'est exactement ? Eh bien,
ça vient toujours après. Essayez d'attraper. Je peux ajouter ici. Et enfin, c'
est quelque chose qui sera exécuté
quoi qu'il arrive. Essayez donc d'exécuter une
ligne à la fois. Il va donc exécuter cette ligne,
cette ligne et cette ligne. S'il y a une exception, il cessera immédiatement
d'essayer d'exécuter ce code ici. Et il sautera immédiatement
à l'instruction catch, exécutant tout
ce qui se trouve à l'intérieur de ces
accolades bouclées ici. Et évidemment, cela dit, ce code surligné
ne sera exécuté que s'
il y a une exception. Si tout fonctionne bien dans
le bloc d'essai ici
, le code de capture ne
sera jamais exécuté. Mais enfin, je passe
par courant quoi que ce soit, peu
importe si tout
a parfaitement fonctionné ou s' il y a une exception,
je peux imprimer. J'ai enfin couru. Et je vais
faire ça ici. Je peux entrer un numéro,
disons dix. Et là, on voit
enfin qu'il a été couru. Si je le réexécute, je peux entrer une chaîne. Nous voyons que vous n'avez pas
entré de numéro, mais nous voyons toujours enfin RAN. Maintenant, cela est utile dans
de nombreux cas d'utilisation, mais un cours très spécifique est en dehors du cadre
de ce cours. C'est essentiellement en ce qui concerne les connexions
à la base de données. Essentiellement, avec
notre instruction try, nous essayerions de nous connecter
à la base de données. Dans un cas de problème, nous
gérerions toutes les erreurs et par exemple, des informations de
connexion non valides. Et puis, enfin, va
fermer toutes les connexions ouvertes. Maintenant, dans certains cas d'utilisation, vous verrez des connexions comme celle-ci, et c'est un bon exemple en théorie du vent qui peut
enfin être utilisé.
42. Jeter des erreurs: Dans la dernière vidéo,
nous avons regardé comment gérer différentes erreurs. Mais ce que nous voulons
créer nos propres erreurs. Par exemple, je vais supprimer tout cela et je
vais changer ce commentaire ici pour
générer une erreur. Et c'est ce que nous
appellerons cela chaque fois que nous voulons
créer notre propre erreur. Par exemple, je
peux dire ici une chaîne. La chaîne suivante est égale au point
d'entrée suivant. Maintenant, ici, je
vais dire que si point
suivant est égal à
ignorer l'erreur de casse, je ne voulais pas
lancer ma propre erreur. Pour ce faire, je peux dire lancer nouvelle exception et je
peux passer une chaîne. Et ce sera le message qui sera imprimé sur la console. Par exemple, une
erreur a été signalée l'utilisateur car l'utilisateur saisit la chaîne ici en tant qu'erreur. Mais nous avons une erreur en ce moment. La solution ici consiste à ajouter l'exception à la signature de la
méthode. Si je clique dessus,
notre méthode principale dit
maintenant lance une exception. Cela dira essentiellement à Java
qu'au sein de cette fonction, nous allons lancer
notre propre exception. Maintenant, en dehors de
notre déclaration if, je peux imprimer la chaîne suivante
de l'utilisateur. Je vais aller de
l'avant et faire ça. Et ici, je vais
entrer dans HelloWorld et il devrait imprimer Hello World et tout fonctionne comme prévu. Mais si je l'exécute encore une fois, je ne peux pas imprimer d'erreur. Et cela rendra alors
cette affirmation vraie. Donc, si j'appuie sur Entrée, nous
allons maintenant obtenir notre propre exception. Ici, nous avons la ficelle. Il indique qu'une erreur a été
donnée par l'utilisateur, et nous pouvons cliquer dessus pour voir où l'
exception a été déclenchée. Maintenant, vous vous demandez peut-être pourquoi
aurait-on jamais voulu faire cela ? Pourquoi ne pas simplement dire à l'utilisateur de
ne pas saisir l'erreur de chaîne ? Eh bien, l'une des raisons pour lesquelles vous
voulez le
faire est que les programmeurs qui
utilisent votre code ou vous-même avec d'autres parties
de votre projet sont alors obligés de détecter certaines erreurs
et d'interagir correctement. Par exemple, si vous
créez votre propre programme d'autres développeurs vont
télécharger et importer. Vous pouvez ensuite lancer
différentes erreurs afin que les développeurs soient obligés de les attraper et de les gérer selon leur
façon de le faire. Selon le
type d'erreur qu'il s'agit. Le même concept s'applique
à vos propres projets. Vous pouvez lancer certaines erreurs chaque fois que certaines
choses se produisent. Dans d'autres parties de votre programme, vous pouvez utiliser le système
try-catch pour
résoudre ce problème.
43. Listes et listes de tableaux: Nouveau début du cours, nous avons dû regarder les tableaux, mais maintenant nous allons jeter un
coup d'œil aux listes et aux ArrayList. Il s'agira essentiellement de façons
plus avancées
d'utiliser les tableaux. Et dans de nombreuses situations
qui vont être plus conviviales
et plus puissantes. Disons donc que je veux
avoir un tableau d'entiers, comme je dis int nombres entiers
équivaut à des crochets. Et ici, je peux ajouter à ma liste de chiffres, par exemple 123. Disons maintenant que je veux aller de l'avant et ajouter un quatrième élément. Eh bien, si je dis que
l'index des nombres trois est égal
à quatre, nous allons maintenant avoir une erreur. Si je survole cela, il est indiqué que l'index du
tableau est hors limites. Cela signifie essentiellement que n'importe quel tableau ne peut pas ajouter de nouvelles
choses. Il faudrait créer un tableau
entièrement différent. Par exemple, je pourrais
dire que les nombres sont égaux un nouveau tableau d'entiers contenant 1234
. Et ça va marcher. Mais évidemment, je ne
veux pas avoir à le faire. Je veux pouvoir
simplement ajouter quelque chose
à ce tableau. Mais par défaut, les baies
ne disposent pas de cette fonctionnalité. C'est pourquoi nous avons des listes de tableaux. Ce sont des moyens beaucoup plus simples
d'utiliser des tableaux où nous pouvons
facilement supprimer des objets, ajouter des éléments, bien sûr, accéder à des éléments similaires
à l'effacement existant. Je vais aller de l'avant et
commenter cette ligne ici. Et je vais créer
une nouvelle ArrayList. La première étape consiste maintenant à
créer une liste générique. Cela va
provenir de Java util. Il s'agit d'une interface, comme on peut le voir à partir de l'icône
verte ici. Maintenant, ici, nous
devons transmettre le type de données
que nous
examinons dans un magasin et nous ne pouvons pas transmettre un int car il s'agit
d'un type primitif, nous devons passer dans
une certaine classe. Dans Java, nous avons accès
à un entier, qui est une classe. Et cela va nous permettre d'
utiliser des entiers dans cette liste. Je vais donc appeler les numéros de
cette liste. Nous pouvons donc attribuer cette
valeur égale à une nouvelle ArrayList. Maintenant, nous avons juste moins
que le signe et plus grand que le signe. Ensuite, ces parenthèses, le signe inférieur et
supérieur à, peuvent contenir la
valeur HEPA souhaitée, par
exemple un entier. Mais dans Java moderne, nous n'avons pas besoin de le faire. Il va
simplement accéder au type de valeur dont nous avons besoin à partir de l'entier
que nous avons transmis ici. Que vient de se passer exactement ? Eh bien, si je survole la liste ici, nous voyons que c'
est une interface, comme nous le voyons ici, une interface
publique. Et cela nous donne un certain nombre de fonctionnalités intégrées que la plupart
des listes différentes auront. Après avoir dit cela, j'aurais dû mentionner
qu'ArrayList n'
est pas le seul type de liste, mais c'est la liste la plus facile à comprendre et la plus facile
à démontrer. Nous allons l'utiliser
pour ce tutoriel. ArrayList est maintenant sa
propre classe qui
va implémenter
l'interface de liste. Il va donc obtenir toutes les fonctionnalités de
la liste, mais aussi s'y construire. C'est cool et
tout, mais comment utiliser
réellement la liste des numéros ? Eh bien, je peux
dire ici que les chiffres pointent. La première option consiste à passer dans une collection
différente, telle qu'une autre liste et y
ajouter tous les éléments. Nous pouvons également ajouter des
éléments individuels tels qu'un entier. Par exemple, un. Maintenant, si j'avais des points de chiffres ici, on peut ajouter un certain élément
dans un certain index. Nous pouvons également effacer la liste. Nous pouvons voir s'il est vide, il existe un tas d'autres options telles que la suppression de
certains éléments, l'obtention de la taille actuelle ou de
la quantité d'
éléments de la liste, et bien d'autres. Allons de l'avant et ajoutons les trois numéros
que nous voulions à cette liste. Les chiffres, n'ajoutez pas deux
chiffres, les points en ajoutent trois. Maintenant, les numéros
ArrayList sont très similaires au tableau de nombres
qui a commenté. De toute évidence, dans un
exemple aussi simple, cela n'aura pas d'importance. Mais si nous voulons vraiment ajouter, disons, dix ou 100 numéros, nous pouvons facilement parcourir
ces chiffres et les
passer dans la
fonction d'ajout ici. Ou si nous le voulions, nous pouvons passer un tableau dans le nouveau
constructeur de listes de tableaux ici. Maintenant, nous ne pouvons pas simplement passer
un tableau générique. Nous devons dire des tableaux avec
un point majuscule comme liste. Maintenant, ici,
nous allons avoir un varargs avec n'importe quel nombre d'
entiers. Je peux donc dire 123. Maintenant, si je supprime
cela, nous
aurons toujours le
même résultat exact. Par conséquent, si vous possédez un tableau
existant, vous pouvez facilement la transmettre, semblable à une syntaxe comme celle-ci. Mais généralement, vous
n'allez pas le faire. La plupart du temps. Vous allez simplement
créer une ArrayList ,
puis y ajouter des éléments selon vos besoins. Allons donc tout
imprimer ici. Je peux imprimer des numéros. Et si je fais ça,
on voit maintenant 123. Allons de l'avant et essayons de
déplacer certains éléments à partir d'ici. Je peux dire que les chiffres sont supprimés. Ici, nous pouvons transmettre
un objet spécifique ou un entier spécifique. Un entier ne va pas
supprimer cet élément spécifique. Cela va réellement
supprimer l'index. Je déplace en quelque sorte l'index un, ce qui va
être la valeur deux. Je fais ça, nous en voyons maintenant seulement 13 dans notre tableau, comme
nous le faisons ici. Mais que se passe-t-il si
je veux simplement supprimer
le numéro deux ? Eh bien, comme je l'ai dit,
la valeur entière de et passe dans. Maintenant, si je fais ça,
nous allons voir 13 comme nous le faisons ici. Maintenant, cela peut paraître
un peu bizarre. Pourquoi
devons-nous réellement faire cela ? Eh bien, si je dis que les
chiffres sont supprimés ici, nous voyons que c'est
une méthode surchargée. Nous pouvons transmettre un
index ou un condensateur, un objet pour ne transmettre
que le numéro deux, le numéro un ou
tout type d'entier de base. Il va traiter cela comme
un type primitif d'int. Il utilisera un
exemple de sujet ici. Mais si nous transmettons
une classe spécifique ou un objet qui
représente quelque chose, il va utiliser la
deuxième option ici. C'est exactement ce que nous faisons avec cette ligne de
code ici. Cela va passer dans un objet et pas seulement
un entier primitif. Il passera ensuite par la
ArrayList et tentera de
supprimer tous les éléments
correspondant à cette valeur ici, ce
qui,
dans ce cas , nous ne
voyons pas le numéro deux. Nous allons maintenant imprimer
combien d'éléments il
y a dans le surréaliste. Je pourrais donc dire les chiffres taille des points. Si je fais ça ici, on en
verra deux dans la console. Et nous pouvons également clarifier cela. Allons de l'avant
et disons des chiffres. Dot clair. Maintenant, si je lance ça, ça
va réellement effacer cela après avoir imprimé les deux
chiffres comme nous le voyons ici. Mais notre taille est maintenant à 0 car nous avons
effacé la ArrayList. Maintenant, une ArrayList et un
général d'écoute est connue
sous le nom de collection. Il s'agit essentiellement d'une
classe personnalisée qui nous
permet d'ajouter certaines choses
et de supprimer certaines choses. Et il y en a un tas d'exemples
différents. Dans cette vidéo et dans
la vidéo suivante, nous
allons passer en revue deux exemples. Mais honnêtement, couvrir
chaque exemple
justifierait son propre
cours sur ce point. Nous allons donc simplement nous en tenir
à certaines des collections les plus basiques et les
plus couramment utilisées, telles que ArrayList et HashMaps, que nous
examinerons dans la prochaine vidéo.
44. Cartes et cartes Hash: Nous allons maintenant jeter
un coup d'œil à HashMaps, qui sont un moyen de
stocker quelque chose connu
sous le nom de paire de valeurs clés. Cela signifie essentiellement que
pour chaque clé, il y a une valeur correspondante. Jetons un
coup d'œil à quelques exemples. Ici. Je vais avoir une
carte, et cela va stocker une clé et une valeur, qui peuvent être deux
types de variables différents. Par exemple, la clé peut être une chaîne et la valeur
peut être un entier. Comme pour ArrayList, il
doit
s' agir des types de classes réels. Nous ne pouvons donc pas dire ça ici. Nous devrions spécifier un
entier avec une majuscule I. Ici, je peux ajouter
différents types de scores. Et je vais attribuer un
égal à un nouveau HashMap. Maintenant similaire à une ArrayList, nous pouvons ajouter une chaîne et un
entier si nous le voulons. Mais dans Java moderne n'est pas
nécessaire, donc je ne vais pas le faire. Maintenant, qu'est-ce qu' une paire de valeurs clés répertoriée à ces scores correspond
à un certain jeu vidéo. Je peux dire que les scores pointent. Et ici, nous pouvons voir que nous
passons une corde, c'est
ce que nous avons de
cette chaîne ici. Et nous transmettons également un entier à partir de cet
entier ici. Il s'agit d'une paire de valeurs clés. Par exemple, supposons que j'
ai 77 points dans ce match. Je peux dire que les scores sont mis. Bob a des points de police dans le jeu
et marque des points ici, Joe a 30 points dans le jeu. Allons de l'avant et
imprimons cela sur la console. Je peux donc imprimer des partitions
et je peux exécuter ça. Et ici, on voit Alex est égal à 77, Joe est égal à 30 et
Bob est égal à 80. Mais quelles autres options
avons-nous quand il s'agit de cela ? Je peux dire que les scores pointent ici. Je peux obtenir une, une certaine chose. Et c'est là
qu'on passait dans la ficelle. Par exemple, je peux passer un Alex. Et je vais couper
toute cette ligne ici avec Control X ou Command X sur Mac. Et puis je peux imprimer ça. Je peux le coller avec Control
V ou Command V sur un Mac. Et si je fais ça, on
va obtenir les partitions de la corde Alex,
dans ce cas, 77. Si je dis points scores, nous pourrions alors l'effacer
comme une ArrayList. Cela va simplement supprimer
toutes les entrées. Nous pouvons obtenir un
jeu d'entrées ou un jeu de clés. Nous pouvons également obtenir les valeurs
et nous
examinerons ce que ces trois choses
font ici dans un instant. On peut voir s'il est vide. Nous pouvons remplacer certaines choses. Nous pouvons obtenir la taille. C'est ici que nous pouvons
obtenir les valeurs. Nous pouvons également voir s'
il contient une clé, horrible atteint une valeur. Et il y a beaucoup
d'autres options, comme les supprimer. La plupart sont
explicites, d'autres que vous devrez peut-être
expérimenter ou consulter
la documentation. Allons de l'avant et essayons
de parcourir toutes
les clés ou toutes les
valeurs ou les deux. Je vais me débarrasser de
ces déclarations imprimées ici. Je vais dire pour une clé à cordes. Et puis, ici, nous allons
utiliser une boucle pour chaque. Nous avons donc notre côlon ici. Je peux maintenant dire le jeu de touches de points de
scores. Et cela renvoie un
ensemble qui est similaire à une liste
que nous avons vue dans la dernière vidéo. Maintenant, ici, je peux
simplement imprimer la clé. Si je fais ça, il
va imprimer Alex, Bob et Joe, comme
nous le voyons ici. Mais que se passe-t-il maintenant
si nous voulions avoir accès aux valeurs ? Je peux dire que les scores points v, et ici nous avons des valeurs. Maintenant, nous devrions
changer cela par un int, je suppose que je suis int. Et puis je peux imprimer de la valeur. Si je l'exécute, nous
pouvons maintenant voir les trois valeurs
de cette carte exacte. Mais que se passe-t-il si je voulais
avoir accès aux deux ? Eh bien, je peux dire que pour
l'entrée avec un E majuscule, nous allons utiliser ceci à
partir de la carte Java util. Ici, nous devons spécifier quels
types de variables nous avons besoin. Donc, dans ce cas, une
chaîne et un entier. Je vais appeler
cette entrée de variable. Ensuite, avec un deux-points, je peux maintenant
dire scores points EntrySet. Maintenant, si je survole les jeux d'entrées, cela va renvoyer un ensemble d'entrée
qui a un K et un V, qui signifie clé et valeur. Donc essentiellement, je
peux dire entrée point fgetc clé ou point d'entrée obtenir de
la valeur pour y accéder. Par exemple, la
clé de chaîne est égale à entrée, parle KCI, puis la valeur int
est égale à la valeur d'entrée point get. Je peux ensuite imprimer la clé
qui a le nom d'utilisateur, a plus de points de valeur. Maintenant, si je l'exécute, il va
imprimer ce que chaque utilisateur possède et ses
points correspondants, comme nous le voyons ici.
45. Créer un fichier de pot: Nous sommes sur le point d'aborder le projet
final du cours, qui va refaire le jeu Battleship dans Java. Mais avant de le faire, nous devons nous
assurer de bien comprendre comment convertir notre code Java
en fichier exécutable. Vous connaissez peut-être les fichiers
DOT EXE où vous pouvez double-cliquer
dessus et ouvrir un programme. En Java, nous avons
un fichier dot jar, que vous
avez probablement vu auparavant. Comment convertir exactement
tout notre code source en un fichier dot jar que
nous pouvons réellement exécuter. La première étape consiste
à cliquer sur l'engrenage en haut à droite, puis à
accéder à la structure du projet. Vous pouvez également utiliser ce
raccourci déroutant ici. Une fois que vous êtes ici,
vous voulez aller à gauche et cliquer sur des artefacts, puis cliquer sur
le survol plus au-dessus pot, puis passer à partir de
modules avec dépendances. À partir de là, nous devons
spécifier une classe principale. C'est essentiellement la classe
où se trouve notre fonction principale. Si je clique sur un dossier ouvert, il sélectionne automatiquement
tous les différents fichiers qui ont une fonction principale.
Nous n'en avons donc qu'un. Nous pouvons simplement cliquer sur OK, puis cliquer à nouveau sur OK. À partir d'ici, je
peux cliquer sur OK. Ensuite, je peux cliquer sur
Construire, construire des artefacts. Et à partir de là, nous
pouvons simplement appuyer sur Entrée ou vous pouvez
également cliquer sur Construire. Nous voyons qu'il est en train de construire
quelque chose près du bas. Et maintenant que c'est fait, nous pouvons étendre notre
répertoire OUT, aller dans Artefacts. Et ici, nous voyons notre pot à points de
travail. Je vais
cliquer dessus avec le bouton droit de la souris. Je pourrais ensuite cliquer sur Copier la référence barre oblique du
chemin. Et à partir de là, je vais
cliquer sur le chemin absolu. Si je colle cela,
ce sera un chemin de fichier vers ce fichier jar
exact. Maintenant, pour exécuter cela, nous ne pouvons pas
simplement l'ouvrir. Nous devons réellement le
faire passer par un terminal. La raison en est que s'il s'
agit d'une application console, qui
signifie que nous
travaillons dans notre console comme nous l'avons vu tout au long de ce
programme. Par conséquent, nous n'avons pas de fenêtre personnalisée avec des
boutons et des images et tout ce qui est hors du cadre
de ce cours. Nous n'avons pas abordé tout
cela dans ce cours. Alors, comment faire ça exactement ? Nous devons ouvrir
notre propre terminal. Si vous utilisez Windows, vous pouvez effectuer une
recherche ou une commande, puis continuer
et appuyer sur Entrée. Maintenant, si vous êtes sur un Mac
parce que je ne possède pas de Mac, je ne sais pas trop comment le faire, mais vous pouvez simplement
Google comment ouvrir terminal sur Mac et cela devrait
avoir un tas de résultats. Je vais donc vous aider. Quoi qu'il en soit, une fois que votre invite de commandes ou
votre terminal est ouvert, vous pouvez taper dans l'
espace Java , l'espace Java, puis coller dans votre chemin. Mais sachez que si vous avez
des espaces sur votre chemin, vous devez rapidement
tout entier et doubles guillemets. Je vais ajouter des codes doubles ici. Et puis à l'intérieur, je peux cliquer avec le bouton droit de la souris
pour coller le chemin. Ici, nous voyons que le
dossier des clés Warnock contient des espaces. Je dois donc ajouter des
guillemets doubles de chaque côté. Si j'appuie sur Entrée, nous voyons que
rien ne se passe réellement. C'est parce que notre code
ne fait rien. Allons de l'avant et
imprimons le texte, Hello World. Ensuite, je vais
aller dans Build,
construire des artefacts et appuyer sur Entrée. Ici, nous voyons qu'il est en
train de construire une fois de plus. En revenant au terminal, je peux appuyer sur la flèche vers le haut pour
passer à la commande précédente. Si j'appuie sur Entrée, ça
va maintenant dire bonjour. Le code actuel est maintenant exécuté
dans ce fichier jar.
46. Introduction au projet cuivrée: Nous allons maintenant
plonger dans le projet final du parcours qui va
créer un jeu de
cuirassé solo. Ici, nous voyons ce tableau et nous
avons cinq
types de navires différents, et ils sont tous
positionnés au hasard autour de la planche. Nous pouvons ensuite saisir une
coordonnée, par exemple un 0, qui est en fait vide
comme on peut le voir ici. Et il dira alors mademoiselle. Mais je peux sélectionner H pour cette
coordonnée ici. Et il dira alors frapper. Et cela est maintenant
remplacé par un x. Si je le fais, alors j 0
va dire, utilisez leur cuirassé coulé et tout ce vaisseau
ici est coulé. Maintenant, contrairement aux vidéos précédentes
du cours où nous avons
écrit du code ensemble, au cours de ce projet, nous
allons travailler ensemble sur les plans de chaque fonctionnalité
individuelle. Et puis j'ai voulu essayer de créer cette fonctionnalité par vous-même. Maintenant, une fois cette fonctionnalité
terminée,
ou une fois que vous avez l'impression d'avoir fait
autant que possible et que vous avez toujours
besoin d'aide supplémentaire. Vous pouvez ensuite passer à
la section suivante de la vidéo où nous
allons réellement la construire ensemble. Mais je vous encourage vivement à
essayer chaque partie de ce projet seul avant regarder le tutoriel
étape par étape. C'est ainsi que fonctionnent les développeurs de
logiciels réels. C'est donc une bonne habitude de
se lancer dans cette voie. Vous pouvez développer une compétence de résolution de problèmes à
l'aide de la programmation.
47. Fichiers et coordonnées: Pour commencer le projet, je supprimerais tous les fichiers que vous avez dans votre projet en
tant que maison sûre, le fichier qui a
votre fonction principale dans lequel
j'étais crée ces
cinq fichiers différents ici. Et gardez à l'esprit le dossier du
cuirassé Maine. Cela contient ma
fonction principale ici. Il y a maintenant beaucoup
de pièces dans ce projet qui
dépendent les unes des autres. Par exemple, si je
survole ma fonction principale ici, je crée un objet joueur et je crée un objet de tableau. Afin de réaliser
les choses étape par étape, nous voulons commencer par la
plus petite pièce possible qui ne
dépendra de rien d'autre. Et il va également être
utilisé et divers autres endroits de ce projet ici qui seront
coordonnés. Maintenant, j'ai dit que vous
devriez tout écrire vous-même avant de le
suivre. Mais ce dossier est très simple. Donc, je vais juste parcourir ce fichier très rapidement avec vous. Et dans
les prochaines vidéos de ce projet, vous voudrez essayer
vous-même avant suivre étape par étape mes
propres explications. Ici, nous avons une classe d'accords
qui signifie coordonnée. Cela va
représenter une
valeur x et y sur le tableau lui-même. Il y aura également
une propriété booléenne, qui va représenter
si elle a été touchée. Cela signifie donc que si un navire est là et que nous avons
deviné cette coordonnée. Maintenant, lorsque nous créons
une coordonnée, nous
passons simplement x et y par le constructeur et nous l'
affectons aux variables
locales ici. Nous avons ensuite un getter
and setter pour les trois propriétés privées, le x, le y et
le booléen. Donc, essentiellement, nous sommes en mesure d'
obtenir le x, d'obtenir le y, C Si cette coordonnée est touchée, ainsi que ces valeurs
individuelles. Nous avons maintenant une fonction
ToString. Chaque fois que nous imprimons un
objet sur la console, il exécute la fonction
ToString en coulisses. Donc, essentiellement, si nous
devions imprimer une coordonnée, elle va
imprimer x virgule y. Maintenant, juste pour plus de précisions, si vous ne savez pas
ce qu'est un quart. Chaque cellule individuelle ici sera sa
propre coordonnée. Par exemple, il s'agit de 0, il
s'agit d'un, et ainsi de suite. Nous allons éventuellement
créer notre propre conseil d'administration ici. Nous sommes différents navires
sont placés au hasard et les colonnes du tableau sont représentées des
lettres a à J. Et les lignes du tableau
sont représentées des chiffres 0 à neuf. Maintenant, ces valeurs x et
y vont représenter où elles se trouvent en
fonction des colonnes et des lignes. Et la valeur de la hanche
va représenter si cela a été un véritable succès. Par conséquent, nous avons
deviné où se trouve un navire. Ici, nous avons un C5, par exemple,
pour cette cellule ici. Si je dis C5, alors je vais passer
à un x. Donc, cette
coordonnée et mon programme ont la
valeur change à true.
48. Navires: Créons maintenant
notre propre vaisseau. Et avant
d'écrire vous-même un code, je suggère fortement que nous
examinions le plan de ce cours et exactement les
conseils que j'ai donnés ici. Qu'est-ce qu'un navire exactement ? Eh bien, évidemment, dans notre
programme ici, si je l'ouvre, cela représentera un vrai vaisseau où
nous avons ici quatre
coordonnées différentes. Et la situation nous a
cinq coordonnées différentes. Il s'agit d'un navire plus petit, il n'y en avait que deux au
total, cinq jetons différents. Donc, si nous regardons cette classe, la première chose que nous
voyons est une liste privée qui contiendra un certain nombre
de coordonnées différentes. Bien sûr, c'est la classe que nous avons écrite dans la dernière vidéo. Comme nous le voyons ici, chaque navire a besoin de sa
propre liste de coordonnées, afin que nous sachions exactement
où il se trouve. Nous voyons maintenant toutes les tailles
de navires possibles ici. Et gardez à l'esprit que
chaque commentaire que j'ajoute, comme celui-ci ici, ce bloc de commentaires est conçu pour vous
aider
autant que possible et vous donner
des informations utiles de ce qui se trouve à l'intérieur de
ces fonctions. Mais ici, nous avons une méthode statique qui renvoie un tableau entier. Cela
va simplement renvoyer 54332. Et si je passe à mon
programme et que je le réexécute, nous voyons
ici un vaisseau
long de cinq. Ici, nous voyons un navire de quatre longs,
mais c'est juste une verticale. Nous voyons ici un
trois trop long, puis trois autres. Donc, si je devais ajouter
un vaisseau de six longs, puis je réexécute ce
programme. Nous le voyons maintenant ici. Cela permettra de déterminer nombre de navires différents dans la taille de chaque navire. Gardez donc à
l'esprit que pour aller de l'avant par défaut, j'ai 54332. Maintenant, nous avons
le constructeur. Et comme cela
n'a qu'une seule ligne, je ne peux pas vraiment vous cacher la
fonctionnalité, mais c'est évidemment très simple. Nous recevons simplement une liste
de coordonnées et nous affectons à la liste des
coordonnées locales ici. Ensuite, nous avons également un getter pour les coordonnées et le nombre de
coordonnées que nous avons. En gros, obtenir la taille
va obtenir la taille du navire comme
il le décrit par le nom. qui signifie que, ici, Ce qui signifie que, ici, ces trois listes retourneront trois listes pour en renverser
deux et ainsi de suite. Maintenant, ces éléments sont probablement
explicites, mais
les quelques autres ne l'ont peut-être pas été. Encore une fois, je vous
encourage vivement à jeter un coup d'œil aux différents
commentaires que j'ai ajoutés. Par exemple, il s'agit d'un index GET qui
renvoie un entier et il
prend un quart dedans. Et si vous vous en souvenez correctement, un index correspond à l'endroit où un
certain élément se trouve dans un tableau ou une liste commence à 0. Ici, la description est que cela renvoie l'index dans la liste des coordonnées où
le cordon du périnée a été trouvé. Il s'agit de la
coordonnée du périmètre et nous faisons référence à la
liste des coordonnées ici. Maintenant, en faisant défiler vers le bas, nous voyons que cela renvoie
l'indice de son présent ou celui de votre
retour négatif. S'il n'est pas présent. Si vous ne trouvez pas l'index, vous souhaitez
renvoyer un indice négatif. Maintenant, nous allons voir si c'est déjà utilisé. Ici, il vérifie si une
coordonnée se trouve à l'intérieur du navire. Voici un conseil. Utilisez la méthode d'index GET. Essentiellement, get index devrait renvoyer un indice négatif
s'il n'est pas utilisé ou il devrait renvoyer autre
chose s'il ne s'agit pas des États-Unis. Et puis, ici, nous avons une fonction
plus compliquée, c'
est-à-dire qu'elle vérifie si une coordonnée donnée
serait un succès. Maintenant, la complexité de
cette fonction vient d'un tableau booléen
renvoyant. Ce tableau va
contenir deux valeurs différentes. Le premier sera
booléen, vrai ou faux s'il s'agit d'un succès. Dans le second, il
sera booléen, vrai ou faux s'
il a coulé le vaisseau. Par exemple, si je suppose
quelque chose et que c'est une erreur, nous aurons du faux et du faux. Ici, nous dirons que
moi est faux et faux. Si c'est un coup, mais qu'il
ne coule pas le vaisseau, il y aura vrai et faux. S'il ne coule pas le vaisseau, il
sera vrai et vrai. s'agit des valeurs
de
retour possibles ce qui concerne
la fonctionnalité. Il possède toutes les fonctionnalités
d'un vaisseau. Alors allez-y et mettez cette vidéo en pause et essayez d'en ajouter
autant que possible, essayez d'aller le plus loin possible. Et une fois que vous avez tout
terminé ou que
vous avez fait de votre mieux et que vous avez vraiment besoin d'aide supplémentaire. Allez-y et reprenez
le reste de cette vidéo et je vais examiner ma solution
pour savoir comment j'ai fabriqué le vaisseau. Très bien, donc en commençant par le haut, nous avons
ici un indice GET. C'est la première méthode cachée que je n'ai pas encore revue. Passons donc en revue
ce que nous essayons de faire. Ici. Nous avons des arguments de coordonnées
et nous essayons de voir où c'est exactement dans
notre tableau de coordonnées, qui a été stocké localement sur sa classe en haut à droite ici. Essentiellement, il
retournera un index ou il retournera un négatif
s'il ne le trouve pas. Nous allons donc
commencer par parcourir chaque coordonnée individuelle
au sein de notre liste. Nous disons que int a est égal à 0, alors que a est inférieur à
la taille de la liste coronet, nous allons augmenter une boucle de for-loop
assez standard. ici. Nous allons y inclure notre trimestre
cible. Et cela
changera en fonction chaque itération de la boucle for. Alors que je vais
simplement
vérifier si la valeur x est égale la valeur X cible et la valeur Y est égale à
une valeur Y cible. Si ces deux éléments sont vrais, cela signifie qu'il s'agit de
la même coordonnée exacte. Et nous voulions revenir
à l'indice actuel, renvoyant
simplement un. Maintenant, si cette affirmation n'
est jamais vraie, nous allons finalement sortir de cette boucle entière. Et par conséquent, nous
allons
commencer à en retourner un négatif, ce qui signifie que nous n'avons pas pu le trouver. Il s'agit de la fonction d'index
GET. Passons maintenant à
la fonction d'utilisation finale, qui
utilise simplement la méthode d'index. Ici. Nous créons un
booléen appelé est en cours d'utilisation et une affectation égale pour obtenir la transmission d'index et les coordonnées ne sont pas
égales à celles négatives. Si négatif signifie
que rien n'a été trouvé. Et si quelque chose a été trouvé, cela signifie
que
quelque chose entre 0 et le nombre total de
coordonnées serait renvoyé. Donc, en gros, si l'indice n'
est pas négatif, cela signifie
qu'il s'agit de nouvelles. Nous pouvons maintenant
simplifier ce code. Je l'ai écrit en deux lignes distinctes juste pour que je puisse minimiser cela, car les
fonctions monolignes ne peuvent pas être minimisées comme nous le voyons ici. Si je minimise cette fonction, nous voyons toujours le code. Donc en redescendant pour
simplifier ce code, je peux simplement retourner, obtenir l'index, passer et coordonner n'est pas
égal à négatif. Cela retournera vrai
ou faux selon que cette coordonnée n'est pas
utilisée pour le navire. Ensuite, nous avons ici la fonction la
plus compliquée qui a été frappée. Et encore une fois, cela renvoie un tableau booléen où la première valeur
booléenne
sera s' il s'agissait d'un accès et une deuxième valeur booléenne sera si elle pense que c'est expédié. Si je développe cela ici, nous allons d'abord obtenir l'indice
à partir de notre méthode d'index GET. Et si l'indice
est négatif, cela signifie
que c'était une erreur. Par conséquent, une erreur devrait
renvoyer un tableau booléen avec
faux et faux, comme nous le voyons ici. Nous voyons ici cette négative, qui sera exactement la
même négative
que celle qui sera renvoyée si nous
ne trouvons rien. Maintenant, après cela, une fois que nous sommes
arrivés à ce code ici, nous savons que nous avons
réellement touché quelque chose. Maintenant, ce qu'il dit, voyez
si on a vraiment coulé ce vaisseau ou si c'est
juste un coup normal. abord, nous allons
obtenir la coordonnée à cet indice et nous
allons définir sa valeur de
hanche sur true. Si vous vous souvenez que dans
la classe de coordonnées ici, nous avons cet accès booléen. pourquoi nous
assignons maintenant cela à vrai parce que nous avons effectivement
touché cette partie du navire. Maintenant, en revenant dans le vaisseau ici, je vais créer
un booléen appelé coulé et définir cela comme vrai. Ce qui signifie essentiellement que par défaut nous allons supposer que
le navire a coulé. Et puis, ici, nous
allons parcourir chaque coordonnée
du navire. S'il n'est pas touché, alors ce
que l'on veut dire que coulé faux et nous allons
sortir de cette boucle. Donc essentiellement, tout ce
code fait ici. Il s'agit d'un siège s'il reste
des coordonnées
qui ne sont pas touchées. Si chaque coordonnée
du navire est touchée, le navire coulera alors. Enfin, nous pouvons
renvoyer notre tableau booléen. À ce stade du
code ici, nous savons qu'il y
a eu un vrai succès. Le premier booléen
est toujours vrai, mais le second booléen
va être vrai ou faux selon qu'il a effectivement coulé la propriété en fonction de
sa logique ici. Ce sera
la fonction « Dead Hit ». Et c'est probablement
la
fonction la plus compliquée de la classe de navires. Mais j'espère que toute cette
explication est logique pour vous et j'espère que vous avez réduit la
plupart de ces
fonctionnalités. Maintenant, bien sûr, dans la
programmation, il existe de nombreuses façons différentes d'écrire
ce même type de code. Donc, si votre code
réalise quelque chose similaire à ce que
fait le mien,
et s'il fonctionne , ne vous inquiétez pas, s'il
semble légèrement différent, c'est parfaitement bien
tant qu'il
fait toujours la même chose.
49. Joueur: Jetons un coup d'œil à
la classe de joueurs. s'
agit essentiellement de gérer tous les vaisseaux d'
un joueur spécifique. Maintenant, dans ce projet, nous
n'avons qu'un seul joueur. En gros, c'est
ici que nous gérons
tous les navires. Je vais donc vous montrer quelques
morceaux de code de configuration de base. Mais quand il s'agit de la fonctionnalité
réelle du fonctionnement de tout, je
vous encourage vivement à essayer d'utiliser mes exemples ici et à écrire la
fonctionnalité vous-même, puis à venir retour à la vidéo. L'un d'eux vous a montré
mes propres exemples. Pour commencer, nous
avons ici une liste de navires, la classe des navires, c'est quelque chose
que nous avons fait dans la vidéo précédente. Nous avons également un constructeur ici, qui va
recevoir la taille de la planche. Si nous allons à mon dossier principal, nous voyons
ici que nous sommes en train de créer un nouveau joueur et que nous
passons dans la taille du tableau. Maintenant, en revenant en arrière, nous
pouvons également rendre tous les navires, juste un obtenteur très simple. Maintenant, pour aller de l'avant,
nous avons une fonction aléatoire. L'objectif est d'
attribuer aléatoirement un point de départ un navire en fonction de la
taille de la planche et de la taille du bateau. Il faut également s'assurer que le bateau peut réellement
s'adapter à la planche. Par exemple, nous avons ici
ce bateau de cinq longs. Et si c'était le point de départ, disons J4, où se
terminer ici. Ensuite, il y aura
quatre personnages, il y aura hors du tableau. Nous ne pouvons pas avoir ça. Nous voulons donc nous
assurer que nous pouvons réellement le bateau sur le bord d'Akron. Maintenant, cela renvoie un entier
et l'instruction retour indique la position de départ du navire
pour
s'adapter au tableau. Par exemple, si cette
position de départ était juste ici, ce serait six parce que
G est l'équivalent de six, je n'affiche que des
lettres ici, il est
donc facile de
distinguer ses lignes ou ses colonnes. Mais disons que ça
commence ici. Ce serait six et
cela ne correspondrait pas l'ensemble du tableau, car il s'
agit d'un navire de cinq longs. Nous avons dix
colonnes au total et dix rangées. Six plus cinq équivaut à 11. Nous allions donc passer par un. Il va en revenir
cinq à la place. En gros, nous
allons nous adapter à
ce changement pour nous assurer que
la planche peut s'adapter au bateau. En allant de l'avant, ici, nous allons avoir une coordonnée de
guitare avec
une coordonnée de départ et
une coordonnée de fin. Cela va
créer une liste de
coordonnées à partir d' un point de fin de
départ. Un exemple est le début de
zéros 0 et la fin de 03. Mais revenons
à 00010 à l'objectif c'est
de passer
ici
une coordonnée de départ et une
coordonnée de fin ici. Et il
retournera ensuite toutes les coordonnées nécessaires pour
remplir l'ensemble du navire. l'avant
ici est en cours
d'utilisation ou nous allons essentiellement vérifier une coordonnée et voir si des navires vont
réellement utiliser cela. Ensuite, nous avons placé des navires, ce qui est en fait la fonction la plus compliquée
de cette classe. Nous allons diriger le
vaisseau, il prend de la taille. Si je vais ici
et que cela va
renvoyer un nouveau tableau d'entiers. Dans mon cas, j'ai cinq tailles de navires
différentes. J'ai cinq longs,
euh, pour longtemps. Deux instances d'un navire
à trois niveaux, et enfin un long
navire A2 avec eux joueur. Ici, je vais courir le point de
navire obtenir des tailles pour obtenir tous les navires et
attribuer au hasard si chaque navire doit
être vertical ou non. Si je rentre dans mon tableau ici, nous voyons que cinq sont horizontaux. Mais ces trois
là sont verticaux. Mais ces trois
là sont horizontaux. Twitter va affecter aléatoirement un booléen vertical à chaque vaisseau que
nous allons essayer de créer. Nous allons également
affecter aléatoirement une coordonnée de départ et ajouter la taille du navire pour
obtenir la coordonnée de fin. Par exemple, ici, cette
coordonnée ARN sera de cinq pour, mais nous allons
ajouter la taille du navire pour obtenir la
coordonnée de fin ici. Cela va être 94. Gardez à l'esprit que
a est fondamentalement 0, c'est
pourquoi J a neuf ans. Ensuite, il est écrit un mélange
selon lequel toutes les coordonnées permettent au navire de s'adapter à la planche et ne sont pas
utilisées par d'autres navires. vous pouvez utiliser
les méthodes précédentes que nous avons créées dans cette classe. En fait, s'assurer qu'il s'agit d'une coordonnée unique qui
fonctionnera réellement. Ensuite, ajoutez le
navire résultant à la liste des navires, qui est déclarée
ici en haut. Maintenant, voici un conseil. Les valeurs des coordonnées de départ x et y doivent être randomisées. Par exemple, ici, cette coordonnée 54,
sera générée aléatoirement. Mais les coordonnées de fin
x et y seront simplement la taille du navire ajoutée à la coordonnée de
départ. Par exemple, nous
avons ici un navire de cinq longs. Nous allons donc prendre
ceci et en ajouter cinq. Il est évident que le
départ sera un seul et non 0. Donc, nous allons simplement
finir par une seigneurie de cinq. De plus, vous ne devez
ajouter qu'au x ou au y, selon qu'il est
vertical ou non. Jamais les deux. Donc, ici, a un vaisseau horizontal, ce qui signifie
que nous n'ajoutons qu'au y. Nous voyons que le x est quatre. Tout le temps pour ce vaisseau entier correspond uniquement aux
valeurs Y qui changent. Par exemple, f à j. Si nous devions les ajouter
aux deux, nous aurions
ici une grille
cinq par cinq avec une plate-forme géante, mais nous voulons une
représentation réelle d'un navire. Cela va être un
peu plus compliqué, surtout sur un lieu de
fonctionnement des navires que la dernière classe. Mais essayez de faire accomplir autant de
choses que possible. Et puis, une fois que
vous avez l'impression d'être allé aussi loin que possible, ou une fois que vous avez tout
terminé, continuez et lisez le
reste de cette vidéo afin que vous
puissiez jeter un coup d'œil à ce que
j'ai fait pour les solutions. Commençons par le haut
pour la fonction aléatoire. Si je développe cela ici, je vais commencer par
créer un entier aléatoire. Avec une valeur maximale
de la taille du tableau. Dans ce cas, entre 09,
car la taille de la planche est de dix. Ensuite, je vais dire que même si le nombre aléatoire et
la taille du bateau sont
supérieurs à la taille de la planche, je vais ensuite soustraire
le nombre aléatoire. Jetons donc un coup d'œil à ce bateau de
cinq longs ici. Si notre nombre aléatoire a commencé
ici, soit six, nous savons maintenant que six plus cinq, parce que six bateaux
au hasard ont cinq dans ce cas, ce qui est supérieur à la taille de
la planche de dix. Nous allons continuer à le
soustraire jusqu'à ce qu'
il soit réellement adapté. Dans ce cas, nous
ne faisons que soustraire une fois, qui nous donne cette position. Ensuite, nous allons revenir à
la nouvelle position de départ. Il s'agit d'une solution permettant de sélectionner un point de
départ au hasard et de
s'assurer que le
point de départ
fonctionne réellement en ce qui concerne la taille du
bateau et la taille de la planche. Maintenant, nous avons
ici toutes les coordonnées. Au début, nous allons
dresser une liste de coordonnées, et nous allons également
renvoyer cette liste à la fin. Ensuite, nous devons réellement
muter ou modifier cette liste de coordonnées
afin d'avoir toutes les
valeurs souhaitées. Nous allons maintenant
ajouter au x ou au y, selon qu'il est
vertical ou horizontal. Ici, je
commence par vérifier si
les valeurs x sont identiques
entre le début et
la coordonnée Y. Si nous regardons
le bateau, par exemple, ici même, les valeurs X
sont toujours les mêmes. Ils ont toujours quatre ans. Par conséquent, il y a
un bateau horizontal. Cela dit, je dois augmenter continuellement
les valeurs Y. Maintenant, ici, je vais obtenir la valeur Y minimale et la valeur Y
maximale. Et nous voyons ici que
je n'utilise que Git. Pourquoi ? Encore une fois, les
valeurs X sont toujours les mêmes. Je vais ensuite
parcourir toutes les valeurs Y. Je vais ajouter
une nouvelle coordonnée à la liste des coordonnées
que nous avons créée ici. Je vais toujours utiliser
la même valeur X exacte, mais je vais passer la
valeur Y à partir d'une boucle for-loop. De cette façon, la sortie est toujours la même
que pour ce bateau, mais la valeur Y change de
voix. Maintenant, dans cette instruction else, il
s'agit exactement du même concept, mais au lieu de la valeur y,
il s'agit de la valeur X. Ensuite, une fois que l'un ou l'autre
est exécuté, retournez la
liste des coordonnées. aller de l'avant, nous avons maintenant la fonction
la plus simple ici, qui va passer une coordonnée et voir si de nos navires
va l'utiliser. Donc, en gros, nous
parcourons tous les navires. S'il n'est pas utilisé, nous
reviendrons vrai. Sinon, nous allons
retourner faux. Maintenant, pour aller de l'avant,
nous avons la fonction la plus
compliquée, qui est de placer tous les navires. Nous allons
commencer par parcourir tous les
navires possibles que nous voulons. Ensuite, nous allons
attribuer aléatoirement un booléen si cela doit
être vertical ou non. Nous allons ensuite créer
une liste de coordonnées, mais nous n'y attribuerons
rien pour l'instant. Vous pouvez maintenant voir un mot clé ou entendre que vous
n'êtes pas trop familier avec. Par exemple, quel
est ce deux-points principaux ou avant cette boucle while ? Et que faisons-nous
exactement ici ? Fondamentalement parce que nous avons notre boucle principale et que nous avons
une boucle à l'intérieur. Avec cette boucle for-loop, je dois m'
assurer d'étiqueter correctement
chaque boucle. Par exemple, si c'est vrai, je veux continuer
sur notre boucle while. Mais parce que je suis
à l'intérieur de la boucle for-loop, il va supposer que je continue
sur la boucle for-loop elle-même. Cela dit, je dois ajouter
une étiquette à la boucle while. Et puis je peux continuer sur cette boucle de while spécifique
et non dans la boucle for-loop. Jetons un coup d'œil à ce que fait
la boucle for. Tout d'abord,
il s'agit d'une boucle infinie, qui signifie
essentiellement que nous
allons exécuter continuellement tout ce code jusqu'à ce que nous atteignions cette instruction de
rupture ici. Alors, au début, je vais obtenir ces valeurs de départ x et y. Je vais ensuite les utiliser pour
créer des coordonnées de départ. Ensuite, je vais obtenir
les coordonnées de fin, mais je ne vais pas
les randomiser. Au lieu de cela, je vais dire que
l'index et la fin y seront
égaux au départ x ou
y plus la taille du bateau. S'il s'agit d'un bateau vertical, nous allons prendre le x de
départ, et c'est tout. Mais s'il ne s'agit pas
d'un bateau vertical, nous allons
prendre le x de départ et l'ajouter des deux côtés. Ensuite, c'est l'
inverse de la fin. Pourquoi ? S'il s'agit d'un bateau vertical, nous allons prendre le
Y de départ et l'ajouter des deux côtés. Sinon, nous
allons simplement utiliser un Y de départ puis nous utiliserons
ces deux valeurs pour créer une coordonnée de fin. Ensuite, nous allons attribuer une nouvelle valeur à cette liste de
coordonnées ici. Cette valeur sera
le résultat des coordonnées de la guitare depuis
le début et la fin. Cela prendra les coordonnées de début
et de fin et tout ce qui se trouve entre les deux
et les ajoutera à une liste. Et c'est la fonction
que nous avons précédemment créée. Ensuite, je vais
parcourir toutes les nouvelles
coordonnées que nous venons d'obtenir, et je vais m'assurer
qu'elles ne sont pas utilisées. S'ils ne sont pas utilisés, nous
allons revenir au début de
la
boucle While et
continuer à essayer encore et
encore jusqu'à ce que continuer à essayer encore et
encore jusqu'à ce vous trouviez un tas de bateaux qui n'
ont pas été utilisés auparavant. Maintenant, si tous les bateaux nous avons
trouvé notre exclusivité, ce qui
signifie qu'ils ne se
chevauchent pas les uns sur les autres. Dans cette boucle for-loop va juste courir
à travers elle-même et
continuer dans cette instruction
break. Maintenant, cette
instruction de rupture va sortir de toute cette boucle while. Et puis, ici, nous
allons créer un nouveau navire en passant les
coordonnées que nous venons d'obtenir, puis passer le navire entier dans la liste des navires juste ici. C'est donc certainement l'une des fonctions
les plus compliquées. Je ne crois pas que nous ayons même
couvert ces étiquettes ici, mais il y a certainement
d'autres solutions qui ne nécessitent pas ces étiquettes qu'il aurait
pu trouver. Mais si vous n'étiez pas en mesure d'obtenir la place des navires ou quoi que ce soit
d'autre dans la classe de joueurs. Ne vous inquiétez pas, les
fonctions spécifiques des navires de l'endroit étaient plus compliquées que la
plupart des choses que
nous avons couvertes jusqu'ici.
50. Terminer le jeu: Il s'agit de la dernière vidéo
sur le projet de cuirassé. Dans cette vidéo,
nous allons créer notre classe de planche et
notre classe cuirassé. Commençons donc par la classe de
support, que nous faisons
un sous-marin de la Nouvelle-Angleterre au sein de notre fonction principale. Et ici, nous passons
dans la taille du plateau ainsi que le joueur que
nous avons déjà créé. Maintenant dans la classe du tableau, je vais passer en revue quelques fonctionnalités de
base, puis je vais
passer en revue les concepts derrière ces différentes
fonctions ici. Vous pouvez donc aller de l'avant et
essayer de les fabriquer vous-même. Et une fois que vous êtes bloqué ou que vous avez terminé
la fonctionnalité, vous pouvez alors voir à quoi ressemble
mes solutions. Donc, à partir de là, nous avons un
entier pour la taille du tableau. Cela vient simplement
du paramètre réel. Ensuite, nous avons également un tableau de caractères
multidimensionnel. Ce sera le tableau
lui-même. Par exemple, il s'agit de l'index 0, l'index un, de l'index 10, etc. Ensuite, nous avons une
liste de lettres qui contient toutes les lettres différentes
pour les identificateurs de colonnes. Donc, en gros, toutes les lettres
que nous voyons ici. De cette façon, nous n'avons pas un 00 comme coordonnée ou 10 comme
coordonnée où il n'est pas clair quelles sont les
colonnes et quelles sont les lignes utilisant des lettres.
Cela est très clair. Lequel est les
colonnes et les lignes. Ensuite, nous avons accès
à un joueur ici, que nous venons d'
obtenir du périmètre. Et donc nous ne faisons que l'
attribuer ici. Nous sommes d'abord en train de créer
un plateau de jeu, que nous allons jeter un coup d'
œil ici dans un instant. Ensuite, nous allons placer les vaisseaux pour créer
le plateau de jeu. Cela va remplir
chaque coordonnée avec le tableau avec un certain caractère d'
espace. Ainsi, par exemple, les
zéros d'index de carte, 0 est égal à l'espace. Bien sûr, vous
ne devez pas
attribuer manuellement chacun de ces éléments. Cela devrait se faire
au moyen d'une boucle for-loop. En allant de l'avant,
nous avons placé des navires. Cela va passer en boucle à travers le
joueur dot get vaisseaux. Et pour revoir cela très rapidement, sous les navires se trouvent ici. Cela renvoie simplement une liste de tous les vaisseaux
attachés à ce joueur. Nous allons donc obtenir tous
les vaisseaux avec un joueur, puis nous allons
obtenir les
coordonnées des navires afin d'
obtenir les valeurs x et y. Si nous entrons dans la classe des navires, nous voyons
ici obtenir des coordonnées. Et cela
renvoie simplement une liste de toutes les coordonnées
associées à ce vaisseau. Nous allons ensuite
attribuer la taille du navire comme personnage du
tableau X et du tableau. Pourquoi ? Par exemple, ici, ces
cinq caractères longs, chaque
index individuel du tableau, par exemple celui-ci, celui-ci
et ainsi de suite sont appelés cinq, car il s'agit des
cinq longs navires ici. C'est le navire à quatre longs. Ici, nous avons les
trois longs navires. Les personnages vont donc être
de la taille de ce bateau. De cette façon, il est très clair où
le bateau commence et s'arrête. Et voici un conseil. Un entier sera comptabilisé
comme un caractère, mais pas comme
vous le souhaitez. Vous devez convertir la taille du point
d'expédition en une
chaîne avec la valeur de point de chaîne de
, puis accéder au premier
caractère des résultats. La raison en est que chaque
personnage individuel
aura un nombre associé quand
il s'agit de
sa valeur ascii, ce qui
ne sera qu'une table de ce chaque caractère individuel de votre clavier représente
une valeur numérique. Vous pouvez aller de l'avant et
Google
ascii valeur ou ascii table pour mieux comprendre
ce dont je parle. Mais cela dit, vous devez vous assurer que
vous convertissez réellement taille
du navire en nombre
réel que vous voulez, car par défaut, il ne
représentera pas le nombre réel. Mais en gros, cela signifie
que la taille du point de livraison va renvoyer un numéro
que vous ne vous attendez pas. Et donc vous devez d'
abord la
convertir en chaîne avec la valeur de point de chaîne de. Ici, nous allons
obtenir un index de lettres. Et vous pouvez
voir cette fonction ici
car elle ne fait qu'
une seule ligne. Mais passons en revue très vite. Ici, nous allons revenir en Amérique la valeur de chaque
lettre du tableau de lettres. Nous passons donc une
certaine lettre ici. Et c'est l'alphabétisation qui
pourrait être un index de, et nous allons
renvoyer l'index de
cette lettre à partir
du tableau de lettres qui définirait
une fraude apparaîtra. Par exemple, a
serait 0, et ainsi de suite. Maintenant, nous allons essayer d' atteindre certaines coordonnées. Cela verrait si une coordonnée
serait un succès ou non. Nous allons transmettre les valeurs x et y de la coordonnée, et elle va
renvoyer une chaîne. Si nous l'avons manqué, il
reviendra ici. Si nous frappons, il
reviendra ici. S'il s'agit d'un coup, cela
coulerait un navire, il reviendrait, vous coulez leur cuirassé. Maintenant, nous
avons enfin deux cordes. Chaque fois que nous imprimons
un objet sur la console, fonction
IF est
appelée. Nous pouvons donc remplacer cette
méthode pour la réaliser. Donc, chaque fois que nous
imprimons
la carte sur la console, nous
allons imprimer
exactement ce que nous voulons, ce
qui
sera la carte complète, comme nous le voyons ici. Ceci est imprimé parce que
notre classe de navires de copain, chaque fois que
nous exécutons
la boucle de jeu, nous allons
imprimer le tableau réel, mais nous couvrirons cela
ici dans un instant. Cela va
parcourir toutes les
coordonnées du tableau et imprimer les caractères corrects
là où ils devraient se trouver. Et un conseil est d'imprimer d'abord
les étiquettes des colonnes, c'
est-à-dire les lettres, comme
vous pouvez le voir ici. Ensuite, imprimez chaque
ligne une par une, commençant par le numéro de ligne, puis chaque coordonnée
de cette ligne, nous allons simplement
imprimer le numéro de ligne. Ensuite, nous allons
passer en revue et ajouter une coordonnée individuelle. Et gardez à l'esprit que
ces lignes ici,
également appelées tuyaux, sont maintenues en maintenant la touche Maj enfoncée et en
appuyant sur la barre oblique inverse, juste au-dessus d'Entrée. Ensuite, j'ai un espace. Ensuite, j'ai le contenu réel de la coordonnée individuelle, puis un autre espace
suivi d'autres lignes. Cette fonction ici
va donc renvoyer une chaîne qui représente
l'intégralité de ce tableau ici. Il s'agira de la classe
du conseil d'administration. Allez-y
et essayez de
progresser autant que possible sur ce point, puis revenez voir mes solutions. Ensuite,
nous passerons les concepts de
la classe cuirassé, qui n'a que deux fonctions
principales. Mais pour l'instant, passez revue la fonctionnalité du tableau et
essayez d'en faire autant que possible. Très bien, j'espère que
vous avez pu ajouter la fonctionnalité
de la classe de tableau, ou vous avez pu aller aussi
loin que possible. Passons maintenant en revue
ma solution pour savoir comment j'ai implémenté
ces fonctionnalités. Nous avons donc
créé une planche de jeu. Si j'étends cela,
nous allons
parcourir chaque
tableau individuel du tableau. Ainsi, chaque
ligne individuelle sera un tableau imbriqué dans le
tableau multidimensionnel ici. Je vais ensuite remplir
toute cette rangée d'un espace. Et si vous avez créé une
boucle imbriquée pour aller de l'avant et le faire,
c' est également très bien. Comme je l'ai
déjà mentionné, il
existe plusieurs façons de
résoudre chaque problème en
matière de développement logiciel. Si vous avez écrit ce
code, c'est très bien. Si vous avez écrit du code similaire
à celui-ci, cela fonctionne toujours. C'est très bien aussi. Ensuite, nous allons
examiner les navires de la place. Si j'étends cela, nous
allons parcourir chaque vaisseau
que possède le joueur. Ensuite, nous allons
parcourir chaque coordonnée de ce vaisseau. Nous allons obtenir les valeurs x et y à partir de ces coordonnées. Et nous pouvons alors
attribuer les index XX et XY à cette
expression ici. Cela revient à ce que je
mentionnais d'utiliser la taille du navire
transmise en valeur de point de chaîne de poussière parce que nous
recherchons un caractère spécifique et chaque personnage
a sa propre valeur entière. Comme il s'agit d'un tableau de
caractères, nous ne pouvons pas simplement lui attribuer
un entier car chaque caractère individuel votre clavier est représenté
par un entier spécifique. Et il va supposer que
ce sera réellement le cas. Par exemple, le caractère 0 tel que représenté par
le numérique 48, le caractère représenté
par le chiffre 49, etc. Ce que nous voulons faire, c'est
nous assurer que nous utilisions
réellement la
bonne chaîne. Nous allons
prendre la taille du navire et le passer dans une ficelle. Mais bien sûr, cela nous
donne une
variable de chaîne lorsque nous voulons
une variable de caractères. Nous pouvons donc simplement
accéder au caractère à l'index 0, qui n'a qu'
un seul index car il n'
a qu'une valeur à un
seul chiffre. Mais en gros, cela
convertira la taille du navire de cinq en personnage cinq
, puis l'attribuera à la bonne
position du tableau ici. Cela passera donc par tous
les navires et
il suffit de placer les 5 à l'endroit où se trouve
les cinq longs navires. Les trois sont, les trois
longs navires sont et ainsi de suite. aller de l'avant,
nous avons obtenu l'index des lettres qui a été couvert plus tôt
sur une seule ligne de code FSS. aller de l'avant encore, il, on va essayer de
frapper certaines coordonnées. Nous allons donc d'abord
créer une coordonnée avec les valeurs X et Y. Et ensuite, nous allons
parcourir chaque vaisseau pour
ce joueur exact. Si vous vous souvenez de
la classe des navires, nous avons une fonction de frappe
en passant à cela. Ici, cela va renvoyer un tableau booléen où la
première valeur sera s'il s'agissait d'un accès et la deuxième
valeur sera si elle
coule le vaisseau, false. Faux signifie que c'était un gâchis. Vrai faux signifie que c'était un coup, mais il n'a pas coulé ce vaisseau. Et vrai, vrai signifie qu'il a frappé et qu'il a
coulé ce vaisseau. En revenant à mon tableau ici, je vais avoir accès
à toutes les données de succès. Ensuite, je peux créer
deux Booléens distincts. Ou est-ce que frappé est l'indice
0 et le sink va être index1 avec le zinc est
allé voir s'il est vrai. Si c'est le cas, nous allons sortir X de
cette coordonnée spécifique. Par exemple, si j'
exécute le programme ici, je peux sélectionner B1 pour le
représenter ici. Je peux entrer B1 et
ça change ce trois en x parce
que c'était un vrai succès. Et il renvoie également le coup de
chaîne ici. Donc, pour ce faire, ici, nous allons revenir si un
couloir utilisant un opérateur ternaire, nous allons nous retourner
penser qu'ils sont cuirassés, mais sinon nous
reviendrons frappés. Et c'est en fait de
là que
vient la force que nous voyons ici dans
notre console. Maintenant, après cette boucle for-loop, si rien ne correspondait réellement, cela signifie
qu'il a manqué. Donc, nous allons simplement
renvoyer la corde ratée. aller de l'avant, nous
avons une fonction ToString. Cela va
simplement imprimer l' intégralité
du tableau à l'écran. Nous allons utiliser une classe
StringBuilder. Et il n'y a rien de
mal à utiliser une chaîne normale et
à l'ajouter. Ils vont essentiellement
faire la même chose. Mais j'utilise un StringBuilder, qui me
permet simplement
d'ajouter plus de choses à la
chaîne de manière plus propre. Mais dans les coulisses, il ne
fait que
s'ajouter à une corde. Je commence
par ces espaces supplémentaires. Parce que si je vais à mon programme, c'est ce
que nous voyons ici même
avec le texte surligné. Il s'agit des
espaces de départ permettant de s'assurer que les étiquettes des colonnes sont alignées avec chaque colonne
individuelle. Ensuite, je mérite quelque chose
connu sous le nom de délimiteur, que vous pouvez
considérer comme un séparateur. Et ce sera un espace
suivi d'un tuyau, suivi d'un autre espace. Et c'est ce que nous voyons
ici entre chaque personnage individuel
pour la coordonnée exacte. Ensuite, je vais
ajouter un commentaire. Je vais dire que
cela va
s' ajouter aux colonnes. Je vais donc
parcourir la taille de la planche car les planches sont
toujours un carré parfait. Je peux parcourir la
taille de la planche deux fois différentes. L'un pour ajouter les colonnes, autre pour ajouter les lignes et
le contenu individuel. Ici, je vais ajouter
les lettres point get a, qui commenceront à 0 et boucle sur
toute la taille du tableau, c'est pourquoi nous voyons
cela ici. Je peux maintenant parcourir tout
ça. Ensuite, nous allons ajouter le délimiteur à
la chaîne réelle, ajoutant
essentiellement l'espace, le tuyau et l'espace supplémentaire. Mais nous ne voulons pas le
faire quand il s'agit du tout dernier élément ici, comme nous le voyons, j n'a pas de ligne
supplémentaire à la fin. Pour vérifier cela, nous pouvons dire si a est inférieur à la
taille de la bordure moins un,
si je devais changer cela, et que je vais l'exécuter
une fois de plus, nous verrons une
ligne supplémentaire sur le bord de j. Ce que je n'aime pas vraiment, mais c'est à vous de choisir si
nous voulons avoir cela. Je vais donc revenir à
ce que c'était. Maintenant, nous allons de l'avant. Une fois que nous aurons
ajouté toutes les colonnes, nous allons ajouter une nouvelle ligne à l'aide du caractère d'échappement à quatre barres obliques
. D'ici. Il va ensuite passer à la ligne suivante
juste ici. Nous allons maintenant ajouter à chaque ligne individuelle le contenu
réel du tableau. Donc, essentiellement, nous
allons avoir une boucle for
imbriquée,
en boucle, deux fois, une pour
les valeurs x et une
pour les valeurs y. À l'intérieur de cette boucle pour imbriquée. Nous allons ensuite
avoir a et B, qui peuvent
représenter x et y. En fait, pour faciliter les choses, je vais cliquer près de a, et je vais appuyer sur Maj
et F6 et le renommer en x. Ensuite, je vais faire
la même chose comme être shift et F6 et je
peux changer cela en y. Maintenant, cela nous rend
plus clairs lorsque nous accédons aux valeurs du tableau
ne font que boucler
tout le x et coordonnées y pour
les valeurs possibles. Maintenant, une chose que je veux
faire, c'est quand y a 0, cela signifie
que nous sommes au
tout début ici. Nous voulons donc ajouter
au numéro de ligne, par
exemple 012 et ainsi de suite. Nous allons donc ajouter
à cela ici, puis nous allons
ajouter le délimiteur,
c'est-à-dire un espace, un espace de
tuyau, que
nous voyons ici. Ensuite,
nous allons ajouter chaque personnage individuel. Nous allons ajouter au
tableau à l'index X et à l'index y. Voici 00, ici 01, c'est 0, à 10, et ainsi de suite. Maintenant, la plupart d'entre eux seront
des espaces,
mais bien sûr, lorsque les
navires ont été créés, on mais bien sûr, lorsque les
navires ont été créés, leur a placé des caractères
aléatoires spécifiques avec l'endroit où les bateaux
devraient se trouver. suite, nous ajoutons
simplement
le délimiteur de cette façon après avoir imprimé
cet espace ici, nous aurions un autre
espace avec un tuyau et autre espace pour créer espace blanc pour
facilite la lecture de tout. Ensuite, nous
allons ajouter une nouvelle ligne. C'est ce qui va
prendre cette ligne
ici et l'enrouler
jusqu'à la rangée suivante. Ensuite, à la fin
de la fonction, nous allons renvoyer les
résultats à ToString, renvoyant
simplement la
chaîne que nous venons de créer. C'est donc tout
quand il s'agit du tableau réel et de l'
impression des choses. Si c'était
compliqué pour vous,
ne vous inquiétez pas, c'est
tout à fait normal. Ce projet a ici
pour objet d'avoir des aspects faciles et
des aspects difficiles. S'il est coincé dans ces parties, ne vous inquiétez pas, c'est
parfaitement normal. Mais maintenant que nous avons créé notre classe de
planches, passons à notre classe de
cuirassé et examinons
les deux dernières fonctions dont
nous avons besoin pour
que tout fonctionne. Jusqu'à présent, nous avons créé un
joueur et créé un tableau. Et maintenant, nous allons
courir, lancer une boucle de jeu
en passant dans notre plateau. Il existe deux fonctions similaires
à celles du reste de ce projet. Je vais expliquer
les concepts derrière cela, puis vous pourrez
aller de l'avant et voir ce que vous pouvez faire avec
ces concepts,
puis vérifier ma
solution par rapport à la vôtre. Voici donc une description du
fonctionnement de cette boucle de jeu. Nous allons créer
une boucle infinie qui fera six choses
différentes. La première consiste à dessiner
le plateau de jeu actuel, imprimant
simplement cet objet de plateau à l'écran parce que nous avons créé une
fonction ToString ici. Chaque fois que nous imprimons un objet port, il exécute cette fonction. Ensuite, nous allons
imprimer la dernière action. Il s'agissait donc soit d'un raté, d'un coup, soit de couler leur cuirassé. Nous allons réellement vouloir
créer cette chaîne mentionnée ici avant
notre boucle sauvage. Ensuite, nous allons demander à l'
utilisateur des coordonnées, ou il pourra entrer
la chaîne quitte. Comme nous pouvons le voir ici, en bas, entrez
la coordonnée. Voici un exemple, ou
quittez pour arrêter de jouer. Si je suis
en train de quitter, il va fermer le programme. En gros, nous allons
revenir de cette fonction. Remarquez que quatre sont ce que
je viens de décrire. Quittez le jeu. Si on
a arrêté de fumer, c'est cinq. C'est là que se trouve
la plus grande partie de la logique. La cinquième étape consiste à vérifier
si la coordonnée est valide. En gros, ce qui signifie qu'il va
falloir des personnages individuels. La première est une lettre valide qui fait partie de ce
tableau ici. Et le second est un
nombre valide compris entre 09 si l'un ou
l'autre est faux ou qu'il ne s'agit
pas d'une chaîne de caractères, il va continuer à
leur demander les
coordonnées correctes. Par exemple, si je lance
ça et que j'entre ou simplement un,
ça me demandera à nouveau, si j'entre Z 0, ça me demandera à
nouveau, si je saisis un 0, ça fonctionnera réellement. Il doit s'agir d'une coordonnée valide. Et c'est en fait
ce que nous allons
faire dans cette prochaine
fonction ici. Mais je vais décrire qu'
une fois que nous y
arriverons, nous allons d'abord vérifier
si une coordonnée était valide. Si c'est le cas, nous allons
essayer d'atteindre ces coordonnées. Ensuite, nous allons
stocker la dernière chaîne
d'action pour l'imprimer une fois que la carte sera
affichée lors de la
prochaine itération de la boucle. C'est pourquoi j'ai
mentionné ici. Fondamentalement, nous allons
avoir une chaîne avant une boucle while, mais nous allons
évaluer la valeur une fois que nous aurons déterminé s'il
s'agit d'une coordonnée valide. Et après avoir essayé d'
atteindre cette coordonnée, cette façon, lorsque nous
revenons au début, nous allons dessiner
la table de jeu actuelle. Nous allons imprimer
la dernière action. De cette façon, le plateau de jeu
ne le cache pas et nous continuerons
ensuite. Si la coordonnée n'est pas valide
, nous allons revenir à la troisième étape, qui se trouve ici. Demandez à l'utilisateur une
entrée de coordonnées ou saisissez Quitter. Voici
ce que nous allons faire pour
faire une boucle encore et
encore, s'ils ne saisissent pas
de coordonnées valides. Et c'est ici que toutes les parties du jeu se rejoignent. Maintenant,
cette fonction va utiliser cette fonction suivante qui
est une coordonnée valide. Nous allons transmettre une chaîne, qui sera l'entrée
réelle de l'utilisateur. Lorsque je saisis b5 ici, la chaîne B5 va être entrée dans ce
paramètre ici. Nous allons également
avoir une planche. Et si nous examinons la description
exacte ici, cela va vérifier si
l'entrée de l'utilisateur est valide. Il y a maintenant deux exigences. La première est qu'elle doit comporter
une chaîne de deux caractères. La prochaine, c'est qu'il
doit s'agir d'une lettre. Il a à J seulement, suivi immédiatement d'un nombre qui est compris entre 0 et neuf seulement. Maintenant, l'entrée de la pointe
est reçue et les chaînes. Ainsi, obtenir une valeur int
du deuxième caractère, qui doit être comprise entre 0 et neuf, n'
agira pas comme
0 à neuf. Au lieu de cela, il va agir
comme s'il s'agissait de valeurs de graphiques ascii, que j'ai mentionnées
plus tôt dans cette vidéo. Cela signifie que le caractère
0 équivaut à l'entier 48 et le caractère un
égal à l'entier 49, et ainsi de suite jusqu'à ce que le caractère neuf soit égal à l'entier 57. Pour vérifier si la chaîne entrée
du deuxième caractère
est comprise entre 0 et 9. Vous avez dit
vérifier si sa valeur
entière est supérieure ou
égale à 48 et
inférieure ou égale à 57, ce qui signifie que 0 est
égal à 489 égal à 57. Nous voulons donc être à l'intérieur de
ces deux valeurs ici. Allez-y et écrivez la
fonctionnalité pour cela. Je suggère de
commencer par la
fonction de coordonnées est valide car elle est
requise pour la boucle de jeu. Et une fois cela
fait,
allez-y et essayez de vous attaquer à la boucle du jeu. Ensuite, vous pourrez comparer vos
solutions à la mienne. Commençons par la coordonnée
est valide. Si je développe cela, voici d'abord si la longueur de la chaîne n'
est pas égale à deux. Si c'est exact,
nous allons renvoyer false car il doit s'agir d'une chaîne de
deux caractères. Par exemple, si j'entre B5, qui comporte trois caractères, il va me demander à nouveau si j'ai passé le test, ce qui
ne comporte pas deux caractères. Ça va me demander à nouveau, et ça continuera de lui demander
à nouveau jusqu'à ce que j'entre des
coordonnées valides telles que J nine. Maintenant, c'est évidemment un gâchis,
mais ça a vraiment fonctionné. Ensuite, je vais
créer un tableau de caractères pour séparer les coordonnées exactes en caractères individuels. La première chose à faire
avec ces informations est de vérifier si la
lettre existe réellement. Board app.get Index des lettres,
comme nous le voyons ici, il va renvoyer l'index de toutes nos
lettres ici. qui signifie que s'il
n'existe pas, il va en retourner un
négatif. Cela permettra essentiellement de s'assurer
que le J a été utilisé. Si ce n'est pas le cas, nous allons simplement
retourner faux. Mais s'il est utilisé, nous
allons continuer et passer à autre chose et vérifier
les valeurs suivantes, qui seront de
0 à 9. Ici, nous créons
un entier et une chaîne est égale
à un caractère. N'oubliez pas que le tableau est
un tableau de caractères, ce qui
signifie qu'il s'agira caractères
individuels dont nombres les représentent. Par exemple, le caractère 0, représenté par un entier 48. caractère 1 est représenté
par un entier 49, et ainsi de suite. Nous allons nous
assurer qu'il s'agit de neuf en
voyant si la valeur est
supérieure ou égale à 48 anions. Si la valeur est
inférieure ou égale à 57. Si cette condition est vraie
ici, cela signifie
que
tout est correct lorsqu'il s'agit de l'entrée utilisateur
valide. Défilons maintenant vers le
haut et créons la fonction finale
pour tout ce projet, qui est exécuté la boucle de jeu. Je vais prendre toutes les
fonctionnalités et assembler pour être
réellement utilisable. Si j'étends cela, nous allons
commencer par créer un scanner. Et nous allons
créer une chaîne, appelée dernière action. Et nous attribuons
cette valeur égale à null. Nous allons attribuer
cela plus tard. Ce sera soit
le gâchis, soit le coup, soit les États-Unis ont coulé leur corde de
cuirassé. Et nous allons aller de
l'avant et faire cela premier parce que nous
voulons imprimer le tableau. Et immédiatement
après, nous
allons imprimer
la dernière action. De cette façon, il n'est pas automatiquement
remplacé par le tableau. Par exemple, si je devais imprimer cela
à l' avance, une heure pour nous faire courir. Si je saisis un 0, par
exemple, le
tableau le couvre. Si je fais défiler ici,
on voit le gâchis. C'est pourquoi nous devons créer une chaîne en dehors
de la boucle while. Il ne
sera donc pas réinitialisé à chaque fois, et nous pourrons ensuite
l'imprimer s'il existe réellement. Ensuite, nous allons créer une
chaîne appelée coordonnées, qui va
recevoir l'entrée de l'utilisateur. Ici, nous avons une
boucle do-while, qui si vous vous souvenez, en
gros, cela va exécuter ce code exact au moins
une fois, quoi qu'il arrive. Ensuite, il
continuera à exécuter ce code tant que cette
expression est vraie ici. Jetons donc un coup d'œil à
ce qu'est ce code à l'intérieur. Ici, nous imprimons
les coordonnées internes, par exemple un 0 ou quittons
pour arrêter la lecture. Nous allons ensuite obtenir le
mot suivant que l'utilisateur saisit. Et nous allons convertir
cela en majuscules. Donc, tout ce qui ressemble à un
0 en minuscules deviendrait Israël majuscule. Et cela nous permet
de comparer plus facilement les choses. suite, nous allons
simplement
voir si l'entrée a été abandonnée. Si c'est le cas, nous reviendrons
de la fonction principale, qui
reviendrait ici, puis quittera
simplement le programme principal. Mais en supposant qu'ils
ne soient pas entrés dans l'
arrêt, nous allons alors voir s'
il s'agit d'une coordonnée valide. Nous allons également utiliser un opérateur
NOT ici. En gros, si ce n'est pas une coordonnée valide avec la carte d'extrémité de
cordon donnée, nous allons
continuer à vivre
jusqu' à ce que l'utilisateur entre
une coordonnée valide. Mais s'ils
entrent des coordonnées valides, nous allons continuer et exécuter tout ce code ici, commençant par obtenir
un tableau de caractères. Et c'est un
concept similaire à ce que nous avions auparavant avec la fonction de
coordonnées is valide, nous allons obtenir un tableau de
caractères avec l'index 0 va être la lettre et l'
index sera le numéro. Donc, en faisant défiler vers le haut,
nous allons obtenir la colonne
qui est le point du tableau obtenir l'index des
lettres, l'index du tableau 0. Maintenant, obtenir l'indice de
ceci va fondamentalement
convertir de a à J
en un 0 à neuf. L'utilisateur voit un à J, mais le programme n'utilise pas
réellement un à J. Nous utilisons des nombres différents
pour les colonnes réelles. Donc, jusqu'à 0 à neuf. Et c'est en fait l'index de chaque personnage individuel. Si nous allons à notre tableau, il y
a l'
indice 0, l'indice 1,
jusqu'à l'indice neuf. Obtenir l'index
de cette liste
va nous donner la
bonne coordonnée Y, ce qui nous donne la colonne. Maintenant, pour la ligne,
nous allons simplement
prendre ce caractère exact
et nous allons soustraire 48 pour les
mêmes raisons que celles que nous voyons ici avec
tous les exemples ascii. En gros, le caractère 0 est égal à 48. Donc, si nous soustrayons 48, cela signifie que
tout nombre
que nous avons sera un entier valide. Il remonte ici. La dernière action va
égaler le tableau pour tenter de frapper, en
passant dans la ligne
et la colonne. Et cela va appeler
la fonction de frappe de tentative, qui ferait ensuite une
boucle voir si un navire était
réellement là. Et puis retournez une ficelle, selon si j'ai effectivement frappé ou si elle a manqué ou si
un saint ce vaisseau. Et c'est ainsi que fonctionne
tout ce programme. Si je l'exécute encore une fois, maintenant que nous voyons comment
tout fonctionne, je peux maintenant entrer B3, par exemple. Et ça va s'exagérer. Si j'entre en b2, qui est au-dessus,
ça va dire Mademoiselle. Et je peux continuer à entrer en B4, B5. Enfin, soyez six ans. Et maintenant, il est dit :
pensez-vous qu'ils sont cuirassés ? Parce que toutes les coordonnées sont
maintenant supprimées pour ce vaisseau. Et maintenant, nous avons un jeu de
cuirassé solo complètement fonctionnel, que nous avons construit
ensemble en utilisant Java.
51. Conclu: Cela conclut l'intégralité de mon cours
Java pour débutants. Je tiens à vous remercier
d'avoir suivi ce cours. Et si nous voulons
en savoir plus sur le développement
logiciel
à partir de mes tutoriels
, consultez ma
chaîne YouTube, les clés usées.