ICT関連の学習備忘録

ICTの学習をアウトプットするワークブックサイト

ICT関連の学習備忘録

2019/09/17:Java基礎(例外処理・配列)

例外処理(exception handling)

例外処理の流れ
1.tryブロック中で例外がおきると、そこで処理を中断する
2.例外がcatchブロックの()内の冷害の種類と一致していれば、
 そのcatchブロック内の処理を行う。
3.catchブロックが終わったら、そのtry~catchブロックの
 あとから処理が続けられる。(処理の継続)

構文
try{
例外の発生を調べる文;
・・・
}
catch(例外のクラス 変数名){
例外がおきたときに処理する文;
・・・
}

while文

構文
while(条件){
指定された文;
}
class Sample5
{
	public static void main(String[] args) throws IOException
	{
		int i = 1;
		
		while ( i <= 5){
			System.out.println(i+"番目の繰り返しです。");
			i++;
		}
	}
}

for文

構文
for( 最初のみ処理する文 ;条件; 毎回処理する文 ){
指定された文;
}
import java.io.*;

class Sample4
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("いくつまでの合計を求めますか");
		
		try{
			BufferedReader br =
			new BufferedReader(new InputStreamReader(System.in));
			
			int num = Integer.parseInt(br.readLine());
			
			int sum = 0;
			for ( int i = 0 ;  i <= num ; i++){
				sum += i;
			}
			System.out.println(sum);
		}
		catch(NumberFormatException e){
			System.out.println("整数を入力してください。");
		}
	}
}

配列の準備

1.配列を扱う変数を用意する(配列を宣言する) 2.値を格納するハコ(要素)を用意する(配列要素を確保する)

配列を用意する事を配列の宣言(declaration)という。
配列を宣言する際の変数を、配列変数と言う。

配列の添字(インデックス)に付いての注意点として、
配列の大きさを超えた要素を利用する事は出来ない。
また、要素を超えた値を指定して代入しても、コンパイル自体は通るが
実行時にエラーとなる。

int[] testAr; #配列の宣言
testAr = new int[3]; #配列の要素数を指定してインスタンス化
testAr[0] = 2; #0番目に2を代入
import java .io.*;

class Sample1
{
	public static void main(String[] args) throws IOException
	{
		int[] test;
		test = new int[5];
		
		test[0] = 80;
		test[1] = 60;
		test[2] = 22;
		test[3] = 50;
		test[4] = 75;
		
		for(int i=0; i<5; i++){
			System.out.println((i+1) + "番目の人の点数は" +
				test[i] + "です。");
		}
	}
}
import java .io.*;

class Sample2
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("テストの受験者数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();		//配列の要素の数を入力させる。
		int num = Integer.parseInt(str);

			int[] test;
			test = new int[num];		//必要な数だけ配列要素を準備する。

			
		System.out.println("人数分の点数を入力してください");
		
		for (int i=0; i<num; i++){
			try{
				str = br.readLine();	//キーボードから必要な数だけ点数入力
				int temp = Integer.parseInt(str);
				test[i] = temp;			//配列要素に点数を格納
			}catch(java.lang.NumberFormatException e){
			System.out.println("整数のみで入力");
			i--;
			}
		}
		for(int i=0; i<num; i++){
			System.out.println((i+1) + "番目の人の点数は" +
				test[i] +"です。");	//配列要素の値を出力
		}
	}
}

他の配列準備方法(記述)

配列の宣言と要素数の指定は下記のようにも行える。
int[] test = new int[5];
このようにインスタンス化と同時に行う他、

型名[] 配列変数名 = {値1,値2,値3,・・・};

int[] test = {2,4,6,8};
String[] str = {"2","4","6","8"}
代入するリテラルには気をつける。
class Sample4
{
	public static void main(String[] args) throws IOException
	{		
		int[] test = {80,60,22,50,75};
	
		for(int i=0; i<5; i++){
			System.out.println((i+1) + "番目の人の点数は" +
				test[i] +"です。");	
		}
	}
}

配列変数に代入する

配列をインスタンス化する前に、
丸々配列を他の変数へ代入すると、
記憶している実体は同じメモリ領域になる為、下記のようになる。

配列をコピーする場合には、コピー先の配列を初期化した後、
for等で代入を行う必要がある。
class Sample6
{
	public static void main(String[] args) throws IOException
	{
		int[] test1;
		test1 = new int[3];
		System.out.println("test1を宣言しました。");
		System.out.print("配列要素を確保しました。");
		
		test1[0] = 80;
		test1[1] = 60;
		test1[2] = 22;
		
		int[] test2;
		System.out.println("test2を宣言しました。");
		
		test2 = test1;
		System.out.println("test2にtest1を代入しました。");
		
		for(int i=0; i<3; i++){
			System.out.println("test2がさす"+ (i+1) +
				"番目の人の点数は" + test2[i] + "です。");
		}
		test1[2] = 100;
		System.out.println("test1がさす3番目の人の点数を変更します。");
		
		for(int i =0; i<3; i++){
			System.out.println("test1がさす" + (i+1) +
				"番目の人の点数は" + test1[i] + "です。");
		}
		
		for(int i=0; i<3; i++){
			System.out.println("test2がさす" + (i+1) +
				"番目の人の点数は" + test2[i] + "です。");
		}
	}
}

#実行結果
C:\YJSample\07>java Sample6
test1を宣言しました。
配列要素を確保しました。test2を宣言しました。
test2にtest1を代入しました。
test2がさす1番目の人の点数は80です。
test2がさす2番目の人の点数は60です。
test2がさす3番目の人の点数は22です。
test1がさす3番目の人の点数を変更します。
test1がさす1番目の人の点数は80です。
test1がさす2番目の人の点数は60です。
test1がさす3番目の人の点数は100です。
test2がさす1番目の人の点数は80です。
test2がさす2番目の人の点数は60です。
test2がさす3番目の人の点数は100です。

要素数を知る。

構文
配列変数名.length
class Sample7
{
	public static void main(String[] args) throws IOException
	{
		int[] test = {80,60,22,50,70};
		for (int i=0 ; i<test.length; i++){
			System.out.println((i+1) + "番目の人の点数は" +
				test[i] + "です。");
		}
		System.out.println("テストの受験者"+test.length+
			"人です。");
	}
}

拡張for文

配列の要素数分だけ繰り返し処理をする。
構文
for(型 変数名 : 配列名){
・・・=変数名;
}
class Sample8
{
	public static void main(String[] args) throws IOException
	{
		int[] test = {80,60,22,50,70};
		for (int num:test){
			System.out.println(num);
		}
		System.out.println("テストの受験者"+test.length+
			"人です。");
	}
}

配列をソートする

import java .io.*;

class Sample9
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		int[] test = new int[5];
		System.out.println(test.length + "人の点数を入力してください。");
		
		for(int i=0; i<test.length; i++){
			String str = br.readLine();
			test[i] = Integer.parseInt(str);
		}
		
		for(int s=0; s<test.length-1; s++){
			for(int t=s+1; t<test.length; t++){
				if(test[t] > test[s]){
					int temp = test[t];
					test[t] = test[s];
					test[s] = temp;
				}
			}
		}
		for (int j=0 ; j<test.length; j++){
			System.out.println((j+1)+"番目の人の点数は"+test[j] +"です。");
		}
	}
}

多次元配列

構文
型名 [] [] 配列変数名;
配列変数名 = new 型名[要素数][要素数];

多次元配列の要素数を出す場合は
配列変数名[添字].length
と記述する事で2次要素数を出すことが出来る。
class Sample10
{
	public static void main(String[] args) throws IOException
	{
		int[][] test;
		test = new int[2][5];
		
		test[0][0] = 80;
		test[0][1] = 60;
		test[0][2] = 22;
		test[0][3] = 50;
		test[0][4] = 75;
		test[1][0] = 90;
		test[1][1] = 55;
		test[1][2] = 68;
		test[1][3] = 72;
		test[1][4] = 58;
		
		for(int i=0; i<5; i++){
			System.out.println((i+1) +
				"番目の人の国語の点数は" + test[0][i] + "です。");
			System.out.println((i+1) +
				"番目の人の算数の点数は" + test[1][i] + "です。");
		}
	}
}



前のページへ戻る