Programavimas

Įvertinkite „Java“ išraiškas su operatoriais

„Java“ programos apdoroja duomenis vertindamos išraiškos, kurie yra literatų, metodo iškvietimų, kintamųjų pavadinimų ir operatorių deriniai. Įvertinus išraišką, paprastai gaunama nauja reikšmė, kurią galima išsaugoti kintamajame, naudoti priimant sprendimą ir pan.

Šioje pamokoje sužinosite, kaip rašyti „Java“ programų išraiškas. Daugeliu atvejų „Java“ išraiškoms rašyti naudosite operatorius, ir jų yra daug operatorių tipai mokėti naudotis. Trumpai supažindinsiu su „Java“ operatorių tipais (įskaitant priedų, bitų, loginių, sąlyginių, poslinkių ir lygybės tipus) ir jų operandus. Taip pat sužinosite apie svarbias sąvokas, tokias kaip operatoriaus perkrova ir operatoriaus pirmenybė, ir pamatysite primityvaus tipo konversijos demonstravimą. Baigsiu su maža „Java“ programa, kurią galite naudoti patys atlikdami primityvaus tipo konversijas.

atsisiųsti Gauti kodą Atsisiųskite šaltinį, pvz., programas, šioje pamokoje. Sukūrė Jeffas Friesenas, skirtas „JavaWorld“.

Paprasti posakiai

A paprasta išraiška yra pažodinis, kintamo pavadinimo arba metodo iškvietimas. Operatoriai nedalyvauja. Štai keletas paprastų posakių pavyzdžių:

52 // sveikojo skaičiaus pažodinis amžius // kintamojo vardas System.out.println ("ABC"); // metodo iškvietimas „Java“ // eilutės tiesioginis žodis 98.6D // dvigubo tikslumo plūduriuojančio taško pažodinis žodis 89L // ilgasis sveikasis skaičius

Paprasta išraiška turi a tipo, kuris yra arba primityvus, arba pamatinis tipas. Šiuose pavyzdžiuose 52 yra 32 bitų sveikasis skaičius (tarpt); System.out.println ("ABC"); yra niekinis (tuštuma), nes jis negrąžina vertės;„Java“ yra eilutė (Stygos); 98.6D yra 64 bitų dvigubo tikslumo slankiojo kablelio reikšmė (dvigubai); ir 89L yra 64 bitų ilgio sveikasis skaičius (ilgas). Mes nežinome amžiaustipo.

Eksperimentuokite su jshell

Naudodamiesi, galite lengvai išbandyti šias ir kitas paprastas išraiškas jshell. Pavyzdžiui, įveskite 52 prie jshell> raginimą ir gausite panašų į šį išvestį:

$1 ==> 52

$1 yra a vardas įbrėžimo kintamasis kad jshell kuria saugoti 52. (Įbrėžimų kintamieji kuriami, kai tik įvedami literalai.) Vykdyti System.out.println (1 USD) ir pamatysi 52 kaip išvestis.

Galite bėgti jshell su -v komandinės eilutės argumentas (jshell -v), kad būtų sukurtas išsamus grįžtamasis ryšys. Šiuo atveju įėjimas 52 gautų tokį pranešimą, kuris atskleistų tą nulio kintamąjį $1 turi tarpt (32 bitų sveikasis skaičius) tipas:

| sukurtas įbrėžimo kintamasis $ 1: tarpt

Tada pabandykite įvesti amžiaus. Tokiu atveju tikriausiai gausite klaidos pranešimą, kad simbolis nerastas. „Java Shell“ daro prielaidą amžiaus yra kintamasis, tačiau jis nežino jo tipo. Turėtumėte įtraukti tipą; pavyzdžiui, pažiūrėkite, kas nutiks, jei įvesite int amžiaus.

Sudėtinės išraiškos

A sudėtinė išraiška susideda iš vienos ar daugiau paprastų išraiškų, integruotų į didesnę išraišką per operatorius, kuri yra instrukcijų seka, simboliškai vaizduojama šaltinio kode. Operatorius transformuoja savo išraišką operandas (-ai) į kitą vertę. Pavyzdžiui, 6 * 5, daugybos operatorius (*) transformuoja operandus 6 ir 5 į 30.

Sudėtines išraiškas galima sujungti į didesnes išraiškas. Pavyzdžiui, 6 * 5 + 10 pateikia sudėtinę išraišką 6 * 5 ir sudėtinė išraiška, susidedanti iš jų produkto, pridėjimo operatoriaus +ir numeris 10. Vertinimo tvarką (pirmiausia padauginkite, o tada pridėkite) diktuoja „Java“ viršenybės taisyklė, kurį netrukus pasieksime.

Sudėtinės išraiškos taip pat gali būti paprastos

6 * 5 yra sudėtinė išraiška, susidedanti iš dviejų paprastų posakių, 6 ir 5. Bet 6 * 5 taip pat yra paprasta išraiška iš +perspektyva. + operatorius mato tik jų produktą - 30, o tai yra paprasta išraiška.

Operatoriai ir operandai

„Java“ operatoriai klasifikuojami pagal jų operandų skaičių:

  • A unarinis operatorius turi, pavyzdžiui, vieną operandą unarinis minusas (pvz., -5).
  • A dvejetainis operatorius turi du operandus, pavyzdžiai yra daugyba ir sudėjimas.
  • A trinaris operatorius turi tris operandus; pavyzdys yra sąlyginis operatorius (?:).

„Java“ operatoriai taip pat skirstomi pagal pozicijas:

  • A priešdėlių operatorius yra unarinis operatorius, einantis prieš operandą (pvz., -5).
  • A postfix operatorius yra unariškas operatorius, kuris seka savo operandą (pvz., amžius ++; - pridėti 1 prie amžiausskaitinė vertė).
  • An infix operatorius yra dvejetainis arba trinaris operatorius tarp operatoriaus operandų (pvz., amžius + 5).

Kitas jshell pavyzdys

Aš pristatysiu daugiau operatorių tolesniuose skyriuose, kur pateikiu pavyzdžius paraiškų forma. Taip pat galite išbandyti šiuos operatorius jshell, panašiai:

jshell> 6 + 2 $ 1 ==> 8 jshell> 7 * $ 1 $ 2 ==> 56

Šiuo atveju pirmiausia įvedame išraišką 6 + 2, kuris jshell įvertina, priskirdami gautą 8 nuliui kintamąjį $1. Toliau mes padauginsime $1 pateikė 7, kuriame 56 kintamieji kintamieji $2. Šis pavyzdys parodo, kad „Java“ išraiškose galite naudoti įbrėžimo kintamuosius.

Perkrauti operatoriai

Pliusas (+) yra operacijos ženklo pavyzdys perkrautas operatorius, kuris yra operatorius, kuris atlieka vieną iš kelių operacijų, pagrįstų tipai jos operandų. Pliusas operatorius atlieka sveiko skaičiaus pridėjimą, kai abu operandai yra sveiki skaičiai, slankiojo kablelio pridėjimą, kai abu operandai yra slankiojo kablelio vertės, ir eilučių sujungimą, kai abu operandai yra eilutės. Operatorius minusas (-) taip pat perkrautas, atliekant sveikojo skaičiaus arba slankiojo kablelio atimimą.

Operatorių tipai „Java“

Priedų operatoriai

priedų operatoriai padidinti arba sumažinti skaitinę vertę sudedant ir atimant. Priedų operatoriai apima papildymą (+), atimtis (-), po pakeitimo (--), postincrement (++), išankstinis nustatymas (--) ir išankstinis prieaugis (++). Styginių sujungimas (+) taip pat laikomas priedu. Štai oficialus kiekvieno iš šių operatorių apibrėžimas:

  • Papildymas: Duota operandas1 + operandas2, kur kiekvienas operandas turi būti simbolio ar skaitinio tipo, pridėti operandas2 į operandas1 ir grąžinti sumą. Pavyzdys: 4 + 6.
  • Atimtis: Duota operandas1 - operandas2, kur kiekvienas operandas turi būti simbolio ar skaitinio tipo, atimkite operandas2 nuo operandas1 ir grąžinti skirtumą. Pavyzdys: 4 - 6.
  • Postdecement: Duota kintamasis--, kur kintamasis turi būti simbolių ar skaitinio tipo, atimti 1 iš kintamasisvertė (saugant rezultatą kintamasis) ir grąžinkite pradinę vertę. Pavyzdys: x--;.
  • Postincrement: Duota kintamasis++, kur kintamasis turi būti simbolių ar skaitinio tipo, pridėti 1 prie kintamasisvertė (saugant rezultatą kintamasis) ir grąžinkite pradinę vertę. Pavyzdys: x ++;.
  • Išankstinis išlyginimas: Duota --kintamasis, kur kintamasis turi būti simbolių ar skaitinio tipo, atimti 1 iš jo vertės, išsaugoti rezultatą kintamasisir grąžinkite naują sumažintą vertę. Pavyzdys: --x;.
  • Išankstinis prieaugis: Duota ++kintamasis, kur kintamasis turi būti simbolių ar skaitinio tipo, prie jo vertės pridėkite 1, išsaugokite rezultatą kintamasisir grąžinkite naują padidintą vertę. Pavyzdys: ++ x;.
  • Styginių sujungimas: Duota operandas1 + operandas2, kur yra bent vienas operandas Stygos įveskite, pridėkite operandas2eilutės atvaizdavimas operandas1eilutę ir pateikia rezultatą. Pavyzdys: „A“ + „B“.

Sudėjimo, atimties, sumažinimo, postmento, iš anksto sumažinimo ir išankstinio prieaugio operatoriai gali generuoti reikšmes, peržengiančias rezultato tipo ribas. Pavyzdžiui, pridėjus dvi dideles teigiamas 64 bitų sveikojo skaičiaus reikšmes, bus gaunama reikšmė, kurios negalima pateikti 64 bitais. Atsiradusio perpildymo „Java“ priedų operatoriai neaptinka ir nepraneša.

Perpildymo aptikimas „Java“ standartinės klasės bibliotekoje

Standartinė klasės biblioteka Matematika klasė apima perpildymo nustatymo metodus. Pavyzdžiui, int addExact (int x, int y) prideda reikšmes į x ir y, grąžinant sumą arba išmetant išimtį dėl perpildymo.

Programos pavyzdys: Priedų operatoriai

1 sąraše pateikiama nedidelė programa, skirta žaisti su „Java“ priedų operatoriais.

Sąrašas 1. „Java“ priedų operatoriai (AddOp.java)

class AddOp {public static void main (String [] args) {System.out.println (125 + 463); System.out.println (2,0 - 6,3); int amžius = 65; System.out.println (amžius); System.out.println (amžius--); System.out.println (amžius ++); System.out.println (- amžius); System.out.println (++ amžius); System.out.println („A“ + „B“); }}

Ankstesnėje pamokoje išmokote naudotis JDK javac įrankis sudaryti Java šaltinio kodą ir java įrankis paleisti gautą programą. Norėdami sukompiliuoti 1 sąrašą, vykdykite šią komandą:

javac AddOp.java

Darant prielaidą, kad kompiliacija yra sėkminga, turėtumėte stebėti AddOp.class failą dabartiniame kataloge. Norėdami ją paleisti, vykdykite šią komandą:

java AddOp

AddOp atsako pateikdamas tokią produkciją:

588 -4,3 65 65 64 64 65 AB

Studijuojant šią išeitį galima įžvelgti postincrement, postdecrement, preincrement ir preecrement operatorius. Jei norite padidinti / sumažinti, amžiausDabartinė vertė yra išvedama prieš didinimo / mažinimo operaciją. Dėl išankstinio prieaugio / išankstinio nustatymo operacija atliekama ir jos rezultatas saugomas amžiaus, ir tada amžiausnauja vertė yra išvestis.

Kartoti su „Java“ operatoriais

Priedų operatoriai yra ypač naudingi iteracijos pareiškimas, kur jie naudojami pereiti į kitą kartojimą. Apie iteracijos teiginius sužinosite kitoje „Java 101“ pamokoje.

Masyvo indekso operatorius

masyvo indekso operatorius ([]) pasiekia masyvo elementą pateikdamas elementą indeksas (pozicija). Šis operatorius dedamas po masyvo kintamojo pavadinimu, kaip pažymiai [0] (pasiekite pirmąjį elementą masyve, priskirtą pažymiai; pirmasis elementas saugomas indekse 0). Štai oficialus apibrėžimas:

Duota kintamasis[indeksas], kur indeksas turi būti sveikasis skaičius (tarpt) tipą, nuskaitykite vertę iš jos arba išsaugokite ją kintamasissaugojimo elementas toje vietoje indeksas. Pavyzdys: temperatūra [1]

Vertė perduota indeksas yra 32 bitų sveikasis skaičius, kuris yra arba 0, arba teigiama reikšmė, svyruojanti iki vienos, mažesnės už masyvo ilgį, kuri nurodoma pridedant .ilgis į masyvo pavadinimą. Pavyzdžiui, pažymiai.ilgis grąžina priskirtą masyvo elementų skaičių pažymiai.

Masyvo kintamieji ir masyvai

pažymiai nėra masyvas, bet yra kintamasis, kuriame yra nuoroda į masyvą sudarantį atminties sritį. Tai galioja visoms „Java“ masyvams. Tačiau tai įprasta nurodyti pažymiai arba bet kuris masyvo kintamasis kaip masyvas.

Programos pavyzdys: masyvo indekso operatorius

2 sąraše pateikiamas programos pavyzdinis šaltinis, leidžiantis žaisti su masyvo indekso operatoriumi.

2 sąrašas. „Java“ masyvo indekso operatorius („ArrayIndexOp.java“)

class ArrayIndexOp {public static void main (String [] args) {int [] grade = {89, 90, 68, 73, 79}; System.out.println (pažymiai [1]); pažymiai [1] = 91; System.out.println (pažymiai [1]); int indeksas = 4; System.out.println (pažymiai [rodyklė]); System.out.println (['C' - 'A'] laipsniai); // System.out.println (pažymiai [1D]); }}

2 sąrašas yra kiek įdomesnis nei „Listing 1.“. Sukūrę penkių elementų, vienmatį sveikųjų skaičių masyvą (per masyvo iniciatorių) ir priskyrę masyvo nuorodą į pažymiai, pagrindinis () gauna prieigą prie įvairių elementų. Ypač domina du daiktai:

  • Masyvo indekso operatoriaus indeksas galiausiai turi būti 32 bitų sveikasis skaičius (0 arba teigiama reikšmė). Galite nurodyti sveiko skaičiaus kintamojo pavadinimą (pvz., indeksas), kuriame nurodoma indekso reikšmė.
  • Galite nurodyti skaičiavimą, susijusį su simbolių literalais. (Vėliau šioje pamokoje supažindinsiu su tipo konversijomis ir sužinosite, kodėl „C“ - „A“ sukuria sveiką skaičių (2), kuris naudojamas kaip galiojantis indeksas.)

Paskutinis pavyzdys, kuris praeina 1D kaip indeksas masyvo indekso operatoriui, yra komentuojamas, nes jis nebus kompiliuojamas. Jei atšauksite eilutę ir bandysite sudaryti 2 sąrašą, gausite klaidos pranešimą apie nesuderinamus tipus: "galimas nuostolingas konversija iš dvigubai į tarpt.."

Sudaryti 2 sąrašą (javac ArrayIndexOp.java) ir paleiskite programą (java ArrayIndexOp). Turėtumėte stebėti šį rezultatą:

90 91 79 68

Masyvo indekso operatorius ir daugiamačiai masyvai

Galite naudoti šį operatorių su daugiamatėmis masyvomis. Pavyzdžiui, darant prielaidą, kad yra dvimatis išlaidos masyvas, išlaidos [0] [1] pasiekia pirmai eilutei priskirtą elementą (per [0]) ir antrą stulpelį (per [1]).

Užduočių operatoriai

užduoties operatorius (=) kintamajam priskiria išraiškos vertę (pvz., i = 6;), įskaitant masyvo elementą (pvz., x [0] = 15;). Išraiška ir kintamasis turi būti užduotis suderinama, ty jų tipai turi sutikti. Pvz., Sveiko skaičiaus kintamajam negalima priskirti eilutės tiesioginės raidės. Aš paaiškinsiu daugiau apie tai, kai aptarsime tipo konversijas.

Sudėtiniai priskyrimo operatoriai (+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=) įvertinti išraiškas ir priskirti rezultatus kintamiesiems vienu žingsniu. Kiekviena išraiška ir kintamasis turi būti suderinami su priskyrimu. Kiekvienas operatorius yra naudinga nuoroda. Pavyzdžiui, užuot nurodžius x = x + 3;, galite nurodyti trumpesnį ir lygiavertį x + = 3;.

Trumpai!

Užuot nurodęs x = x + 1; arba x = x - 1;, galite nurodyti trumpesnį x + = 1; arba x - = 1;. Galėtum sutaupyti dar daugiau klavišų paspaudimus nurodant trumpesnius x ++; arba x--;.

Operatoriai bitais