ПредишенСледващото

Пример 1.8 показва още един друг метод за изчисляване факториелите. Той използва техника за програмиране, наречен рекурсивно% Сион. Рекурсия случва, когато един метод се нарича, или, с други думи, на рекурсивни разговорите към себе си. Рекурсивна алгоритъм за изчисляване факториелите въз основа на факта, че п! Това е равно на п * (п 1). Този метод на изчисляване на класическата факториелите Ким например рекурсия. В този случай, този метод не е особено tiven ефективност, но рекурсия има много важни приложения, както и на мерките, доказва, че прилагането му в Java е напълно законно. В този пример също така, вместо тип данни междинно съединение, което е 32-битов ТСЕ Lym използва тип данни дълго, което е 64 битово цяло число. Факториелите бързо да станат много големи, така че от допълнителен капацитет въведете време отнема факториел () метод по-полезен.

Пример 1.8. Factorial2.java

* Този клас демонстрира рекурсивно метода на изчисляване факториелите. това

* Начин нарича себе си няколко пъти, въз основа на формулата: п! = N * (п 1)! ** /

обществени клас Factorial2

публично статично дълго факториел (дълъг х)

ако (х <0) throw new IllegalArgumentException("x должен быть>= 0 ");

ако (х <= 1) return 1; // Здесь рекурсия прекращается

друго връщане х * факторен (х 1); // Стъпка рекурсия - наричащ себе си

Пример 1.9 представя подобрена версия на предишните примери, изчисляване на факториел. Факторен - са идеални кандидати за кеширане, както изчисляването им изисква VRE Мени и, по-важното е, можете да се изчисли не толкова риала факто поради ограничените данни от тип дълго. Ето защо, когато тези мерки, след като факториални се изчислява, неговата стойност се запазва за използване duschego шамандура.

Отделно от демонстрация на техники за кеширане в този пример той въвежда Ся нещо ново. На първо място, в Factorial3 клас е дефиниран в член поле кал:

статичен дълго [] маса = нов дълго [21];

статични INT последните = 0;

Статичните полета - един вид променливи, запазвайки обаче, стойността му между метод разговори факториел (). Това означава, че в статични полета може да се съхранява стойност, изчислена с едно извикване на метод Nye за употреба в друга се нарича.

На второ място, можете да видите в този пример, как да създадете масиви:

статичен дълго [] маса = нов дълго [21];

Първата половина на този ред (преди знак =) заявява статична маса поле, което е масив от стойности дълго тип. На втория етаж на тази линия 21 създава масив от стойности на тип дълго с помощта на новия оператор.

И накрая, този пример показва как да се генерират изключения:

хвърли нова IllegalArgumentException ( "Overflow: х е твърде голям.");

Изключения - един вид Java обекти. Те, както и масив, създаден с помощта на нова ключова дума. Ако програмата генерира изключение обект с помощта на отчета за хвърляне, това означава, че е имало грешка или непредвидени обстоятелства. Когато определени там изключения, програмно управление се прехвърля към най-близкия оператор раздел улов пробвам / улов. Този раздел трябва да съдържа кода за обработка на IP включвания. Ако изключението не е хванат, про изпълнение грама се спира със съобщение за грешка.

В Пример 1.9 има изключение, за което уведомява процедурата по призвание, който премина своя аргумент е твърде голям или твърде малък. Аргументът е твърде голям, ако тя е по-голяма от 20, poskol Ку, ние не можем да се изчисли факториелите по-големи от 20. Аргументът е твърде малък, ако тя е по-малко от 0, защото факториелите са определени само за не-отрицателни числа. Как да се намеси и да се обработва от изключение, е показано в следните примери в тази глава.

класове се използват в програмата. След като, например, клас java.math.BigInteger внесени, няма да се налага да пишете името му Ной етаж; можете да се обърнете към него просто като BigInteger. Вие мо zhete също да импортирате пакет от класа да се включат във файла, например, следния ред:

Имайте предвид, че java.lang пакет класове автоматично се внасят, защото принадлежат към настоящия пакет от мерки, еквивалентни в нашия случай е com.davidflanagan.examples.basics.

Пример 1.10 използва същите кеширане уреди, които в най-малко 1.9. Въпреки това, тъй като много от факториелите, които могат да бъдат изчислени, вече не се ограничава до по-горе, кеширане NEL Gia използва набор от фиксиран размер. Вместо това, пример използва java.util.ArrayList - първокласно обслужване за прилагане на структура данни, такива масиви и в състояние да растат и да е размер. Тъй ArrayList - е обект вместо тегл Сив, когато се работи с това е необходимо да се прилагат методи, такива като размер (), се добавя () и се (). По същия начин, BigInteger - това е обект, не примитивна стойност, следователно, не може да се приложи nyat оператор да се размножават обекти BigInteger *. Вместо това, се използва умножение () метод.

Пример 1.10. Factorial4.java

// импортиране на класовете, които ще се използват в нашата програма.

// вносител на класа, не бяхме длъжни да с пълното му име.

внос java.math.BigInteger; // Внос класа BigInteger от пакет java.math java.util внос * .; // внос всички класове (включително ArrayList)

* Тази версия се прилага произволно големи числа

* Размер, така изчислените стойности не са ограничени до по-горе.

* За кеширане изчислени стойности се използва ArrayList

* Вместо фиксиран размер масиви. ArrayList е като масив,

* Но може да расте и да е размер. метод факторен () е обявен

* Като «синхронизирано», така че може да се използва безопасно в

* Многонишковите програми. В проучването на този клас се опознаем

* С java.math.BigInteger и java.util.ArrayList. Работа с Java версии,

* Предишен Java 1.2, използвайте Vector вместо ArrayList.

обществени клас Factorial4

защитен статичен ArrayList маса = нов ArrayList (); // Създаване на статичен кеш

/ ** () метод факториален, която използва BigInteger обекти съхраняват в ArrayList * /

публично статично синхронизирано BigInteger факторен (междинно съединение х)

Свързани статии

Подкрепете проекта - споделете линка, благодаря!