この広告は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の処理をしています。
==================
† 地球の末路!? †
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("サンプル");
}
}
===== 実行結果 =====
====================
† 地球の末路!? †
また、ラベルの色を指定する時には「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);を追加すると
ウィンドウの大きさを変えることができなくなります。
===== 実行結果 =====
=================
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です。
====================
† 地球の末路!? †
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です。
====================
答えは次回に。
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です。
====================
答えは次回に。
タグ: xとyの値を入れ替えてみよう!
†
地球の末路!?
†
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
====================
書式にしたがった出力をします。
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
====================
タグ: printfメソッド
†
地球の末路!?
†
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
====================
† 地球の末路!? †
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」だから。
直接アクセスできないので安全だけど少々不便。
そんな時に登場するのが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」だから。
タグ: get/setメソッド
†
地球の末路!?
†
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で値を戻す必要があります。
ちなみに、呼び出される側の引数を仮引数、呼び出し側の引数を実引数と言います。
メソッドを呼び出す側は呼び出すメソッドの引数の型・数を合わせる必要があります。
† 地球の末路!? †
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で値を戻す必要があります。
ちなみに、呼び出される側の引数を仮引数、呼び出し側の引数を実引数と言います。
メソッドを呼び出す側は呼び出すメソッドの引数の型・数を合わせる必要があります。
† 地球の末路!? †