Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Raspberry Pi и чашечку Java, пожалуйста! (Часть 2)

Anna | 2.06.2014 | нет комментариев
Данная статья перевод 2-й части статей посвящённых применению Java на Raspberry Pi. Перевод первая частивызвал огромный интерес к вероятности использованию Java на Raspberry Pi. Оригинал этой статьи был опуликован в 16 номере журнала MagPi.

Это вторая статья об применение Raspberry Pi для программирования на языке Java, прочитав её вы узнает огромнее о конструкциях этого языка и сумеете испробовать написать больше трудные программы. Также она может оказаться пригодной тем, кто хочет узнать о языке С, так как стержневой синтаксис Java совпадает с синтаксисом С.

В начале данной статьи я подробнее опишу руководящие конструкции. А дальше перейду к изложению числовых, строковых и логических типов данных, приведя примеры их применения. С учетом каждого этого в наши примеры программ будет добавлена больше трудная логика выполнения. Ну что-же, давайте приступать к работе!

Подробнее об руководящих конструкциях

В первой статье вышедшей в MagPi #14 мы познакомились с двумя руководящими конструкциями: if и while. Я знаю, что вы об этом помните, но на каждый случай напоминаю. Блок конструкция if будет исполнен, только в случае, если значение логичного выражения в круглых скобках правда. Для примера:

 if (a > 3) { c = c   a; }

Складываем a и c только в случае, когда значения a огромнее 3. Выражение в круглых скобках, называемое состоянием, может принимать значение true(правда) либо false(вранье), т.е. тип данных boolean(Подробнее о логическом типе данных ниже по тексту статьи).

Конструкция if может включать в себя блок запускаемый при значении состояния false. Для примера:

 if (score > 50) {
   System.out.println("You won! :) ");
 } else  {
   System.out.println("You lost. :( ");
 }

Дальнейшая рассмотренная нами конструкция была while. Выполнен блок конструкции while может быть только в случаях, когда состояние выражения в скобках будет равно true, т.е. это может быть один и больше раз, а может быть и не разу. Для примера:

 int f = 10;
 while (f < 20) {
   System.out.println(f);
   f  ;  
 }

Целые числа от 10 до 19 будут печататься пока переменная f не станет равна 20 и итог выражения изменится на false. Ещё, вы обратили внимание на червёртую строку? Отлично, если подметили. Два знака плюс позже переменной f увеличивают её на 1. Это короткий вид записи:

 f = f   1;

Подобно:

 f--;

Знаки минус сокращают значение присваиваемое переменной f. Напротив это будет выглядеть так:

 f = f - 1;

Сейчас разберём конструкцию for. Конструкция for схожа на while, но для неё в одной строке дозволено сочетать критерии выполнения и выражение изменяющие значение переменной. По этому перебор чисел от 10 до 19 дозволено записать применяя for:

 for (int f = 10; f < 20; f  ) {
   System.out.println(f);
 }

Да, данный вариант выглядит суперкомпактнее чем пример с while. Впрочем while, в некоторых случаях, может быть комфортнее для выполнения циклов.

Сегмент в скобках для конструкции for поделена на тричасти. Первая для инициализации переменной в начале, вторая для проверки переменной при всяком повторе цикла, третья для метаморфозы переменной в конце выполнения всякого цикла.

Сейчас откроем ваш редактор и сделаем новую программу:

 public class Countdown {

   public static void main(String[] args)
      throws InterruptedException {
     for (int t = 10; t >= 0; t--) {
       System.out.println("-> "   t);
       Thread.sleep(1000);
     }
     System.out.println("-> Fire!");
   }

 }

Компиллируем её командой javac и запускаем java(подробнее в предыдущей статье). Эта программа будет отсчитывать 10 секунд позже чего напечатает «Fire!». Как программа изменяет переменную t? Двойственный минус сокращает значение t от 10 до 0. Но для чего тогда потребовалась строка Thread.sleep(1000);? Она создаёт в программе задержку в 1 секунду(1000 миллисекунд) на всяком шаге цикла. Применяя способThread.sleep, вы делаете задержку только в рамках блока for. Теперь оставим всё как есть, об обработке исключений я расскажу позднее.

Усложним задачу #3: Сотворим новую программу Countup.java для счёта от 1 до 20 с задержкой в одну секунду. И когда счёт дойдёт до 15 выводим сообщение «Five to go…».

Ну и напоследок ещё раз взглянем на switch. Конструкция switch проверяет значения переменной и в зависимости от того, чему равна переменная в круглых скобках, исполняет код позже двоеточия. Пример:

 import java.util.Random;

 public class CardinalDirection {

   public static void main(String[] args) {
     Random r = new Random();
     int dir = r.nextInt(4);
     switch (dir) {
     case 0:
       System.out.println("North");
       break;
     case 1:
       System.out.println("West");
       break;
     case 2:
       System.out.println("South");
       break;
     default:
       System.out.println("East");
       break;
     }
   }

 }

В этом примере целое число генерируется нечаянно в диапазоне от 0 до 3. Но, что увлекательно, значение числа не показывается, оно необходимо только для указания. Всякий из блоков выполняется только, если совпало значение переменной с значением позже case. Подметьте я не стал ставить case для числа 3, применял конструкцию default. Это отличный пример того, что отменнее неизменно ставить default, что-бы при любом не совпадающем значении выбирался данный блок команд.

Отлично, ну вот и всё что я хотел рассказать об руководящих конструкциях. Безусловно есть и другие больше экзотические конструкции, такие как continue либо do-while, но они не так Зачастую применяются и я оставлю их вам, на независимое постижение.

Ну, а сейчас дозволено перейти к абсолютно иной теме постижения Java.

Пара бит о числах

Рано либо поздно вам необходимы будут математические расчёты, в этой главе даны основы с чего нужно будет их начинать постигать. В Java всякая числовая переменная, это один из базовых типов языка. В Java четыре целых типа(без десятичных разрядов), два с плавающей точкой(с десятичными разрядами) и два высокой точности. Для применения в программе вы объявляете переменную один раз, после этого по ходу выполнения программы меняете её значения. Для примера:

 int trees; // declaration
 trees = 17665785; // assignment

Но вы можете сразу объявив переменную присвоить ей значение, для этого две строки объединим в одну:

 // declaration & assignment
 int trees = 17665785;

Вы подметили //? Две косые черты обозначают предисловие комментария, всё что идёт позже них Java игнорирует. Таким методом вы можете позже них оставлять всякие свои заметки и напоминания по выполнению программы, что-бы через пару месяцев либо даже лет припомнить, как ваша программа должна трудиться.

А сейчас диапазон доступных значений для четырёх типов целых переменных:

 byte: от -128 до 127
 short: от -32 768 до 32 767
 int:   от -2 147 483 648 до 2 147 483 647
 long: от -9 223 372 036 854 775 808 
      до 9 223 372 036 854 775 807

Почаще вам потребуется 3-й тип(int). Но если вам необходимы будут числа с десятичными дробями(с плавающей запятой), в Java есть два типа данных:

 float:  от ±1,401298e-45 до ±3,402823e 38
 double: от ±4,94065645841246e-324 
         до ±1,79769313486231e 308

Традиционно для математических расчетов отдают предпочтение типу double (15 знаков позже запятой), чем типу float (7 знаков позже запятой).

В Java четыре арифметических оператора -* и /, и ещё круглые скобки для выставления приоритетов вычисления. Ниже расчёты с этими операторами:

 public class Numbers {

   public static void main(String[] args) {
     int x = 5;
     System.out.println(7   x * 3); // 22
     System.out.println((7   x) * 3); // 36
     System.out.println(7 / 3); // 2
     // 1 (remainder) 
     System.out.println(16 % 3);
     // 2.33333333
     System.out.println(7.0 / 3.0);
     System.out.println(3.14159265 * x * x);
   }

 }

Операции умножения и деления имеют приоритет перед сложением и вычитанием. Обратите внимание на действие операторов / и % при делении целых чисел, если в первом случае(оператор /) позже деления осталась только целая часть, то во втором случае(оператор %) напротив целая часть была отброшена, а в итоге остался остаток 1 от деления 7 на 3.

Вам необходимы ещё математические функции? Отлично, вызывайте класс Math. Пример вот эта формулы:

В Java она будет выглядеть так:

 double f = Math.abs(1.0 - Math.pow(x, 3.0)) /
    (4.0 / 3.0 * Math.sqrt(y - Math.PI)));

Когда мы записываем целые и дробные числа, то мы выделяем это точкой. Скажем 3 целое, а 3.0 дробное.

Дальнейшая программа выводить все целые числа от 1 до 10, не делящиеся без остатка на 3:

 public class Sum {

   public static void main(String[] args) {
     int total = 0;
     for (int n = 1; n <= 10; n  ) {
       if (n % 3 != 0) {
         total = total   n;
         System.out.println(total);
       }
     }
     System.out.println("Total: "   total);
   }
 }

В результате получим 1, 2, 4, 5, 7, 8, 10 и их сумму 37.

Усложним задачу #4: Изменим последнюю программу и выведем на экран числа не делящиеся без остатка на 4.

Если вам необходимы подробности какие ещё функции доступны в классе Math:
docs.oracle.com/javase/7/docs/api/java/lang/Math.html

Но что делать, если 15 знаков позже запятой не довольно? Тогда вам необходимы типы BigInteger иBigDecimal, это классы для проведения расчётов с дюже высокой точностью. Если нужно, то сто, 1000 либо миллион знаков позже запятой. Пример:

 import java.math.BigDecimal;

 public class HighPrecision {

   public static void main(String[] args) {
     BigDecimal a = new BigDecimal("2.7182818284"
        "590452353602874713526624977572"
        "4709369995"); // 50 decimal places
     BigDecimal b = new BigDecimal("3.1415926535"
        "89793238462643383279502884197169399"
        "375105820974944"); // 60 dec. places
     System.out.println("e*pi="
        a.multiply(b));
   }

 }

Запустите программу и вы всё увидите сами.

Пара бит о строках

У вас теснее была вероятность в всяком из наших примеров познакомится с применением строк. Тип String, это последовательность букв, чисел и символов. Самый примитивный пример «Hi John!». Но Почаще каждого строки применяются для поиска участков текста либо компоновки крупных сообщений из нескольких частей. Для этого дозволено применять знак , он объединит несколько строк в одну:

 String qty = "50";
 String message = "I found "   qty   " books.";

Если нужно получить часть строки, то используем способ substring. У всякого символа строки есть расположение. Нумерация идёт 0. В дальнейшем примере нужно получить слово «house», его символы расположены от 4 до 8 позиции:

 String line = "The house is blue.";
 String word = line.substring(4, 8   1);

Ну, а если нужно узнать, где именно предисловие слова «house», тогда применяем indexOf:

 String line = "The house is blue.";
 int position = line.indexOf("house"); // 4
 int red = line.indexOf("red)"; // -1

Обратите внимание indexOf пишется с заглавной «O». В последней строке примера мы пытаемся обнаружить слов «red», но его нет и способ нам вернул -1.

Узнать длину строки дозволено с поддержкой способа length(). Для приобретения отдельных символов используем charAt(), дальнейший пример показывает, как разложить строку на символы и побуквенно вывести их на экран.

 public class LetterByLetter {

   public static void main(String[] args) {
     if (args.length == 0) {
       System.out.println("Please type"
          " a word.");
     } else {
       String word = args[0];
       for (int i = 0; i < word.length(); i  ){
         System.out.println(word.charAt(i));
       }
     }
   }

 }

Позже компилляции javac, запустим программу указав командной строке слово позже имени нашего класса.

  java LetterByLetter telephone

Как я теснее говорил в прошлой статье, через переменную args, введённая при запуске строка, передаётся в вашу программу (в данном примере это «telephone»). Испробуйте не вводить это слово и итог выполнения будет иной. Руководящие конструкции обеспечивают работу программы так, что с предисловие получаем размер строки и только потом по порядку выбираем буквы.

Для работы с строками существует много способов. Больше детально это описано в документацииdocs.oracle.com/javase/7/docs/api/java/lang/String.html

Усложним задачу #5: Изменим предшествующий пример и сделаем всякую букву заглавной. Подсказка: используйте способ делающий сразу все буквы строки заглавными, данный способ дозволено обнаружить в документации по ссылке выше.

Пара бит о логике

Логичный тип boolean может иметь только два варианта значения переменной: true либо false. Он Почаще каждого применяется как индикатор либо как переключатель для руководящих конструкций ifwhile либо for. Пример объявления логической переменной:

 boolean painted = false;

А так изменяем её значение:

 painted = true;

Либо используем для while:

 while (painted) {
   // do something
 }

Ещё дозволено для логических переменных использовать операторы ! (NOT), && (AND) и || (OR). Оператор !возвращает обратное значение переменной. Оператор && возвращает true, если обе части выражения имеют значение true, а оператор || возвращает true, если правда-бы одно из них равно true. Пример:

 boolean a = true;
 boolean b = false;

 boolean c = !a; // false
 boolean d = a || b; // true
 boolean e = a && b; // false
 boolean f = (!a && b)  || a; // true

В грядущем вам могут встретится операторы & и |. Это тоже операторы AND и OR, но для числовых переменных. Но версия операторов && и || больше результативна, так как нет разницы в расположении операндов. В дальнейшем примере вы можете увидеть, что от места расположения операндов итог не зависит:

 boolean g = a || b; // true
 boolean h = b && a; // false

Числовые и строковые переменные также могут возвратить итог типа boolean. Это итог сопоставления для руководящих конструкций. Пример:

 int total = 156;
 if (total > 100)  {
   // do something
 }

Выражение в скобках сопоставляет переменную total, если total огромнее 100, итог будет true, напротивfalse. Для сопоставления 2-х чисел вы можете применить следующие шесть операторов:

   ==        равно
   !=        не равно
   >         огромнее
   <         поменьше
   >=        огромнее либо равно
   <=        поменьше либо равно

Все возвращаемые значения будут типа boolean, и вы можете их комбинировать с другими операторами типаboolean, для примера:

 int sides = 6;
 boolean painted = false;
 if (sides >= 4 && !painted) {
   // paint it!
 }

Завершение

В эту статью вошло несколько тем, и она получилась больше трудной чем первая, но я постарался сделать так, Дабы её прочтения вы стремительней освоили основы Java.

В дальнейшей статье мы познакомимся с способами, классами и объектами Java, с некоторыми библиотеками классов входящих в Java. Позже чего вы сумеете сделать программу генерирующую карту.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB