アフィリエイト広告を利用しています
最新記事
カテゴリアーカイブ

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2019年04月06日

Javaスレッド(Threadを継承)

Threadを継承したスレッドです。
Threadを継承しているクラスは「sleep」は1/1000秒なので
1秒間停止させたいなら「1000」を、2秒間停止させたいなら「2000」と書きます。

Threadを継承しているクラスは「sleep();」
Threadを継承していないクラスは「Thread.sleep();」とします。
「sleep()」使用する時には「try{}catch(){}」で囲む必要があります。

class Sample extends Thread {

 private String name;

  public Sample(String n) {
   name = n;
  }

  public void run() {

   for (int i = 0; i < 10; i++) {
    try {
 sleep(1000);
 System.out.println(name + "の処理をしています。");
 } catch (InterruptedException e) {
 e.printStackTrace();
    }
  }
 }
}

class Demo {
 public static void main(String[] args) {

  Sample s = new Sample("Sample");
   s.start();

    for (int i = 0; i < 10; i++) {
 try {
  Thread.sleep(2000);
  System.out.println("mainの処理をしています。");
 } catch (InterruptedException e) {
  e.printStackTrace();
}
  }
 }
}


===== 実行結果 =====

Sampleの処理をしています。
mainの処理をしています。
Sampleの処理をしています。
Sampleの処理をしています。
mainの処理をしています。
Sampleの処理をしています。
Sampleの処理をしています。
mainの処理をしています。
mainの処理をしています。
mainの処理をしています。

==================

地球の末路!?




2019年03月25日

座標と大きさを指定してウィンドウにラベルを表示

座標を指定してラベルを表示するにはsetLayout()をnullにして無効にします。
また、ラベルの色を指定する時には「setOpaque(true)」とする必要があります。
「setBounds(x, y, width, height)」でラベルの座標と大きさを指定します。

「label1.setHorizontalAlignment(JLabel.LEFT)」と
「label1.setVerticalAlignment(JLabel.TOP)」でラベルの文字位置を指定しています。

setHorizontalAlignmentはLEFT、CENTER、RIGHTで指定。
setVerticalAlignmentはTOP、CENTER、BOTTOMで指定。

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;

class Demo extends JFrame{

 JLabel label1;
 JLabel label2;
 JLabel label3;

 public Demo(String title) {
  super(title);

   this.setLayout(null);

   label1 = new JLabel("ラベル1");
   label1.setOpaque(true);
   label1.setBackground(Color.CYAN);
   label1.setHorizontalAlignment(JLabel.LEFT);
   label1.setVerticalAlignment(JLabel.TOP);
   label1.setBounds(10, 30, 100, 50);

   label2 = new JLabel("ラベル2");
   label2.setOpaque(true);
   label2.setBackground(Color.MAGENTA);
   label2.setHorizontalAlignment(JLabel.CENTER);
   label2.setVerticalAlignment(JLabel.CENTER);
   label2.setBounds(50, 80, 150, 50);

   label3 = new JLabel("ラベル3");
   label3.setOpaque(true);
   label3.setBackground(Color.GREEN);
   label3.setHorizontalAlignment(JLabel.RIGHT);
   label3.setVerticalAlignment(JLabel.BOTTOM);
   label3.setBounds(100, 130, 200, 50);

   this.add(label1);
   this.add(label2);
   this.add(label3);

   this.setSize(400, 250);
   this.setVisible(true);
   this.setResizable(false);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public static void main(String[] args) {
   new Demo("サンプル");
 }
}

===== 実行結果 =====

座標と大きさを指定してウィンドウにラベルを表示

====================

地球の末路!?




2019年03月15日

ウィンドウを表示してみよう!

JFrameを使ってウィンドウを表示する基本的なJavaプログラミングです。


import javax.swing.JFrame;

class Demo extends JFrame{

 //コンストラクタ
 public Demo(String title) {
  super(title);

  this.setSize(300, 200);
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }

 public static void main(String[] args) {
  new Demo("サンプル");
 }
}

コンストラクタ内にthis.setResizable(false);を追加すると
ウィンドウの大きさを変えることができなくなります。

===== 実行結果 =====

ウィンドウを表示してみよう!

=================

地球の末路!?




2019年03月10日

xとyの値を入れ替えてみよう!の答え

よくやってしまいがちな間違いがこれ。

class Demo{
 public static void main(String[] args) {

  int x = 5;
  int y = 3;

  x = y;
  y = x;

  System.out.println("xの値は" + x + "です。");
  System.out.println("yの値は" + y + "です。");
 }
}

===== 実行結果 =====

xの値は3です。
yの値は3です。

====================

xにyの値を代入しているのでxの値は3になります。
値が3になったxをyに代入しているからyの値は変わらず3のまま。
xとyの入れ替えるにはもうひとつ新たに変数を宣言します。
変数名をzにしていますが何でもいいです。

class Demo{
 public static void main(String[] args) {

  int x = 5;
  int y = 3;
  int z;

  z = x;
  x = y;
  y = z;

  System.out.println("xの値は" + x + "です。");
  System.out.println("yの値は" + y + "です。");
 }
}

===== 実行結果 =====

xの値は3です。
yの値は5です。

====================

地球の末路!?




2019年03月09日

xとyの値を入れ替えてみよう!

class Demo{
 public static void main(String[] args) {

  int x = 5;
  int y = 3;

  System.out.println("xの値は" + x + "です。");
  System.out.println("yの値は" + y + "です。");
 }
}

===== 実行結果 =====

xの値は5です。
yの値は3です。

====================

これをxにyの値を、yにxの値を代入して下記のようになるようにするには
上記プログラムをどのように書き換えたらいいでしょうか?

===== 実行結果 =====

xの値は3です。
yの値は5です。

====================

答えは次回に。

地球の末路!?




2019年02月25日

printfメソッド

第1引数に書式を指定すると第2引数以降の値を用いて
書式にしたがった出力をします。

class Demo{
 public static void main(String[] args) {

  int i = 123;

  /*
  %は書式設定の指定を開始する、dは整数を10進数で出力
  %nは改行コードを出力、%xは整数を16進数で出力
  */

  System.out.printf("%d%n", i);
  System.out.printf("%x%n", i);

  //左詰め。
  System.out.printf("[%-5d]%n", i);

  /*
  第2引数以降の1,2,3,4の順番を変えて出力することもできます。
  出力する順番を変える時は「引数の番号$」で引数を指定します。
  */

  System.out.printf("%1$d %2$d %3$d %4$d%n", 1, 2, 3, 4);
  System.out.printf("%3$d %1$d %4$d %2$d%n", 1, 2, 3, 4);
  System.out.printf("%2$d %4$d %3$d %1$d%n", 1, 2, 3, 4);
 }
}

===== 実行結果 =====

123
7b
[123 ]
1 2 3 4
3 1 4 2
2 4 3 1

====================

地球の末路!?




2019年02月20日

配列の添字が大きな方から出力

配列の添字が大きな方から出力する配列遊びです。

class Demo{
 public static void main(String[] args) {

  //配列の宣言
  int[] array = {9,5,1,3,5,7};

   //forを使って先頭から出力
   for(int i = 0; i < array.length; i++) {
    System.out.print(array[i] + " ");
   }

    //改行
    System.out.println("\n");

   //拡張forを使って先頭から出力
   for(int j: array) {
    System.out.print(j + " ");
   }

    //改行
    System.out.println("\n");

   //forを使って添字の大きな方から出力
   for(int x = 1; x <= array.length; x++) {
    System.out.print(array[array.length - x] + " ");
   }
 }
}


===== 実行結果 =====
9 5 1 3 5 7

9 5 1 3 5 7

7 5 3 1 5 9
====================

地球の末路!?




2019年02月19日

get/setメソッド

フィールド変数にアクセス修飾子privateを付けてアクセスを制限すると
直接アクセスできないので安全だけど少々不便。
そんな時に登場するのがget/setメソッド。
get/setメソッドを使うことで間接的にアクセスさせることができます。

class Sample{

 private int i;
 private String s;

 public void setNum(int i){
  this.i = i;
 }

 public void setStr(String s) {
  this.s = s;
 }

 public int getNum() {
  return this.i;
 }

 public String getStr() {
  return this.s;
 }
}


/*
setメソッドは値をセットするためのメソッドなので戻り値の型はvoidにします。
値を受け取るための変数を引数として用意する必要があります。
getメソッドは値を習得するためのメソッドなので引数は不要ですが
戻り値の型、取得した値のreturnが必要になります。
*/


class Demo{
 public static void main(String[] args) {

  Sample sm = new Sample();

   //まずは値をセットせずに出力してみる
   System.out.println(sm.getNum());
   System.out.println(sm.getStr());

   //セットする
   sm.setNum(5);
   sm.setStr("こんにちは!");

   //取得して出力
   System.out.println(sm.getNum());
   System.out.println(sm.getStr());
 }
}


===== 実行結果 =====
0
null
5
こんにちは!
====================

「0」「null」が表示されるのは
intのデフォルトが「0」、Stringのデフォルトが「null」だから。

地球の末路!?




2019年02月10日

足し算の処理をするメソッド

足し算の処理だけする簡単なメソッド。
additionメソッドの引数のi,jは呼び出し側から
値を受け取るための変数なのでi,jじゃなくてもいいです。


class Demo{

 static int addition(int i, int j) {
  int sum = i + j;
  return sum;
 }

 public static void main(String[] args) {

  int x = 5;
  int y = 6;

  int ans = addition(x, y);
  System.out.println(ans);
 }
}

==== 実行結果 ===
11
==============

戻り値の型をvoid(戻り値なし)ではなく
intにしているので必ずreturnで値を戻す必要があります。

ちなみに、呼び出される側の引数を仮引数、呼び出し側の引数を実引数と言います。
メソッドを呼び出す側は呼び出すメソッドの引数の型・数を合わせる必要があります。

地球の末路!?




2018年12月25日

再帰処理n!(階乗)

nの階乗は「n! = n(n-1)!」なので
「n! = n(n-1)n(n-2)n(n-3)・・・1」になります。

2の階乗は2×1 = 2
5の階乗は5×4×3×2×1 = 120

この処理をJavaで書くとこんな感じに。


class Demo{

 public static int factorial(int x) {
  if(x == 1) {
   return 1;
  }else {
   return x * factorial(x - 1);
  }
 }

 public static void main(String[] args) {
  ArrayList<Integer> list = new ArrayList<Integer>();

   for(int i = 1; i < 7; i++) {
    list.add(factorial(i));
   }

   for(int j = 0; j < 6; j++) {
    System.out.println(list.get(j));
   }
 }
}

===== 実行結果 =====
1
2
6
24
120
720
================

地球の末路!?




検索


















×

この広告は30日以上新しい記事の更新がないブログに表示されております。