Raspberry PiとJavaカップをお願いします! (パート2)



この記事は、Raspberry Piに関するJavaの使用に関する記事の第2部の翻訳です。 最初の部分の翻訳は 、Raspberry PiでJavaを使用する可能性に大きな関心を寄せています。 この記事のオリジナルは、MagPiの第16号に掲載されました。



これは、JavaでのプログラミングにRaspberry Piを使用することに関する2番目の記事です。 基本的なJava構文はCと同じであるため、Cについて学習したい人にも役立ちます。



この記事の冒頭で、制御構造について詳しく説明します。 次に、数値、文字列、論理データ型について説明し、それらの使用例を示します。 これらすべてを念頭に置いて、より複雑な実行ロジックがサンプルプログラムに追加されます。 さあ、仕事に取り掛かりましょう!



制御構造の詳細





MagPi#14最初の記事では 2つの制御構造体ifwhileを紹介しました 。 あなたはこれを覚えていることは知っていますが、念のため、思い出させてください。 if構築ブロックは、括弧内の論理式の値がtrueの場合にのみ実行されます。 例:



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







aとcを追加するのは、aの値が3より大きい場合のみです。状態と呼ばれるカッコ内の式は、値true (true)またはfalse (false)を取ることができます。 ブールデータ型(論理データ型の詳細については、以下のテキストを参照)。



if構造には、 falseのときに開始するブロックが含まれる場合があります 。 例:



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







私たちがレビューした次の建設はでした。 while構造のブロックは、括弧内の式の状態がtrueの場合にのみ実行できます。 1回以上の場合もあれば、1回ではない場合もあります。 例:



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







変数fが20に等しくなり、式の結果がfalseに変わるまで、10〜19の整数が出力されます 。 また、4行目に気づきましたか? 気がついたら。 変数fの後の2つのプラス記号は、変数を1増やします。これは、短い表記です。



  f = f + 1;
      
      







同様に:



  f--;
      
      







マイナス記号は、変数fに割り当てられた値を減らします。 それ以外の場合、次のようになります。



  f = f - 1;
      
      







次に、 forコンストラクトを見てみましょう。 for構文はwhileに似てますが、1行で、実行基準と変数の値を変更する式を組み合わせることができます。 したがって、10〜19の数字の列挙はforを使用して記述できます。



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







はい、このオプションはwhileの例よりもコンパクトに見えます。 ただし、場合によっては、ループの方が便利な場合があります。



for構文の括弧内のセクションは、3つの部分に分かれています。 最初は変数を最初に初期化すること、2番目はサイクルの各繰り返しで変数をチェックすること、3番目は各サイクルの終わりに変数を変更することです。



エディターを開いて、新しいプログラムを作成します。



  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に減らします。しかし、なぜString Thread.sleep(1000)が必要なのです ? サイクルの各ステップで1秒(1000ミリ秒)の遅延をプログラムに作成します。 Thread.sleepメソッドを使用すると、 forブロックのスコープのみを遅らせます。 そのままにしておきましょう。例外処理については後で説明します。



タスク3を複雑にしましょう :1秒の遅延で1から20までカウントするための新しいプログラムCountup.javaを作成します。 そして、スコアが15に達すると、「Five to go ...」というメッセージが表示されます。




さて、最後に、 スイッチをもう一度見てみましょう。 スイッチ構成体は変数の値をチェックし、括弧内の変数が何であるかに応じて、コロンの後にコードを実行します。 例:



  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の後の値と一致する場合にのみ実行されます。 注:番号3の大文字と小文字は設定しませんでした。 デフォルトの構成を使用しました。 これは、常にdefaultを設定する方がよいという事実の良い例です 。そのため、一致しない値に対しては、このコマンドブロックが選択されます。



まあ、まあ、それは私が制御構造について話したかったすべてです。 もちろん、 continuedo-whileなど、もっとエキゾチックな構造もありますが、あまり頻繁には使用されないので、独立した学習のためにそれらを残しておきます。



さて、Javaのまったく異なるトピックに進むことができます。



数に関するビット





遅かれ早かれ、数学的な計算が必要になります。この章では、なぜそれらの研究を開始する必要があるかについての基本を説明します。 Javaでは、すべての数値変数は言語の基本的なタイプの1つです。 Javaには4つの整数型(小数点なし)、2つの浮動小数点(小数点付き)、2つの高精度があります。 プログラムで使用するには、変数を1回宣言し、プログラムの実行時にその値を変更します。 例:



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







しかし、すぐに変数を宣言して値を割り当てることができます。そのため、2行を1行に結合します。



  // declaration & assignment int trees = 17665785;
      
      







//に気づきましたか? 2つのスラッシュはコメントの始まりを示し、Javaはそれらの後に来るすべてを無視します。 このようにして、プログラムの実装に関するメモやリマインダーを後に残すことができます。これにより、数か月または数年で、プログラムの動作を思い出すことができます。



そして今、4種類の整数変数で利用可能な値の範囲:



  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 )が必要です。 ただし、10進数(浮動小数点)数が必要な場合、Javaには2つのデータ型があります。



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







通常、数学的な計算では、 浮動小数点型(小数点以下7桁)よりも倍精度型(小数点以下15桁)を好みます。



Javaでは、4つの算術演算子+-*および/ 、および計算の優先順位を付けるための括弧。 以下は、これらの演算子を使用した計算です。



  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); } }
      
      







乗算と除算の演算は、加算と減算よりも優先されます。 整数を除算するときの演算子/の動作に注意してください。最初の場合(演算子/ )除算後に整数部分のみが残り、2番目の場合(演算子 )で逆に整数部分は破棄され、残りの1は除算のままです7 on 3。



さらに数学関数が必要ですか? OK、 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が必要です。これらは、非常に高い精度で計算を実行するためのクラスです。 必要に応じて、小数点以下100桁、1000桁、または100万桁。 例:



  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は、文字、数字、および文字のシーケンスです。 最も簡単な例は、「こんにちはジョン」です。 しかし、ほとんどの場合、文字列はテキストのセクションを検索したり、複数の部分から大きなメッセージを作成したりするために使用されます。 これを行うには、 +記号を使用します。複数の行を1つに結合します。



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







文字列の一部を取得する必要がある場合は、 部分文字列メソッドを使用します。 各行文字には位置があります。 番号は0です。次の例では、「house」という単語を取得する必要があります。その文字は4〜8桁です。



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







さて、「家」という言葉の始まりがどこにあるかを正確に知る必要がある場合は、 indexOfを使用します。



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







indexOfは大文字の「O」で記述されていることに注意してください。 例の最後の行では、「赤」という単語を見つけようとしますが、そこにはなく、メソッドは-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変数を通じて、起動時に入力された文字列がプログラム(この例では「電話」)に渡されます。 この単語を入力しないでください。結果は異なります。 制御構造はプログラムの動作を保証するため、最初から文字列のサイズを取得してから、文字を順番に選択します。



文字列を操作する方法は多数あります。 これについては、ドキュメントdocs.oracle.com/javase/7/docs/api/java/lang/String.htmlで詳しく説明されています



タスク5を複雑にしましょう :前の例を変更し、各文字を大文字にします。 ヒント:文字列のすべての文字をすぐに大文字にするメソッドを使用します。このメソッドは上記のリンクのドキュメントにあります。




ロジックに関するいくつかのビット





boolean boolean型には、変数の値に対してtrueまたはfalseの 2つのオプションしか指定できません。 それは、ほとんどの場合、インジケータとして、または制御構造のスイッチとして使用されます。 ブール変数宣言の例:



  boolean painted = false;
      
      







そして、その値を変更します。



  painted = true;
      
      







または、 しばらくの間使用します:



  while (painted) { // do something }
      
      







論理変数に演算子を使用することもできます (NOT)、 && (AND)および|| (または)。 演算子 変数の戻り値を返します。 &&演算子は、式の両側がtrueで、 ||trueの場合、 trueを返します。 少なくとも1つが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
      
      







数値変数と文字列変数もブール型の結果を返すことができます。 これは、制御構造の比較結果です。 例:



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







括弧内の式は、変数totalを比較します。totalが100より大きい場合、結果はtrueになり 、そうでない場合はfalseになります 。 次の6つの演算子を使用して、2つの数値を比較できます。



  ==  !=   >  <  >=    <=   
      
      







返される値はすべてboolean型で 、他のboolean型の演算子と組み合わせることができます。次に例を示します。



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







おわりに





この記事にはいくつかのトピックが含まれており、最初の記事よりも複雑であることが判明しましたが、Javaの基本をより早く読むことができるように作成しようとしました。



次の記事では、Javaに含まれるいくつかのクラスライブラリを使用して、Javaのメソッド、クラス、およびオブジェクトに精通します。 その後、カードを生成するプログラムを作成できます。



All Articles