実技(Javaプログラミング実習2)⑦

1.文字列操作
lengthメソッドを使うと文字の数がわかる

String str="Hello";
System.out.println(str.length()); //5

charAtメソッドを使うと文字列から一文字ずつとりだせる。
例)

String str="Hello";
System.out.println(str.charAt(0)); //H
System.out.println(str.charAt(1)); //e

問)
上記をふまえ、以下の処理を実現せよ。
[実行例]
文字を入れてね>Hello [enter]
H
e
l
l
o

解)

import java.util.Scanner;
public class Sample {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("文字を入れてね>");
		String str=scan.next();
		for(int i=0;i<str.length();i++){
			System.out.println(str.charAt(i));
		}
		scan.close();
	}
}

問)
文字を入れてね>Hello
*H*e*l*l*o*
解)

import java.util.Scanner;

public class Sample {
	public static void main(String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.print("文字を入れてね>");
		String str=scan.next();
		for(int i=0;i<str.length()*2+1;i++){
			System.out.print(i%2==0 ? '*':str.charAt(i/2));
		}
	}
}

問)
文字を入れてね>Hello
olleH

解)

import java.util.Scanner;

public class Sample {
	public static void main(String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.print("文字を入れてね>");
		String str=scan.next();
		for(int i=str.length()-1;i>=0;i--){
			System.out.print(str.charAt(i));
		}
		/*
		for(int i=0;i<str.length();i++){
			System.out.print(str.charAt(str.length()-1-i));
		}
		*/
	}
}

2.メソッド(値渡し)
値渡しのサンプル)

public class Sample {
	public static void main(String[] args){
		int x=10;
		int result=plusOne(x);
		System.out.println(x);
		System.out.println(result);
	}
	public static int plusOne(int x){
		x++;
		return x;
	}
}

3.メソッド(参照値渡し)
参照値渡しサンプル)


public class Sample {
	public static void main(String[] args){
		int[] data={1,2,3};
		plusOneArray(data);
		for(int n: data){
			System.out.println(n);
		}
	}
	public static void plusOneArray(int[] arr){
		for(int i=0;i<arr.length;i++){
			arr[i]=arr[i]+1;
		}
	}
}

4.メソッド、配列
問)
int型配列を引数で受け取りそれを逆順にするメソッド。
public static void reverseArray(int[] arr){処理}
を作成し、mainメソッドから{2,5,1,6,9}を渡し、出力を得よ。
[実行例]
9
6
1
5
2
解)

public class Sample {

	public static void main(String[] args) {
		if(args.length>0){


	}
	public static void reverseArray(int[] arr){
		for(int i=0;i<arr.length/2;i++){
			int temp=arr[i];
			arr[i]=arr[arr.length-1-i];
			arr[arr.length-1-i]=temp;
		}
	}

}

5.コマンドライン引数
コマンドラインから引数を渡し、それを連結して表示する処理を記述せよ。
ただし、引数がない場合は「引数がありません」と出力すること。

解)

public class MethodLesson6 {
	public static void main(String[] args) {
		if(args.length > 0){
			for(String s:args){
				System.out.print(s);
			}
		}else{
			System.out.println("引数がありません");
		}
	}
}

やってみよう!
問)
2つの配列を引数で受け取り、その合計を要素とする配列を返却するメソッド
public static int[] addArray(int[] arr1,int[] arr2){}
を作成せよ。(2つの配列の要素数は同じと考えて良い)
[実行例]
要素数>3 [enter]
a0>3
a1>5
a2>4
b0>6
b1>1
b2>7
9
6
11
解)

import java.util.Scanner;

public class Sample {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.print("要素数>");
		int num=scan.nextInt();
		String[] names= {"a","b"};
		int[][] data=new int[names.length][num];
		for(int i=0;i<data.length;i++) {
			for(int j=0;j<data[i].length;j++) {
				System.out.printf("%s%d>", names[i],j);
				data[i][j]=scan.nextInt();
			}
		}
		int[] result=addArray(data[0],data[1]);
		/*
		int[] a=new int[num];
		int[] b=new int[num];
		for(int i=0;i<names.length;i++) {
			for(int j=0;j<num;j++) {
				System.out.printf("%s%d>", names[i],j);
				if(i==0) {
					a[j]=scan.nextInt();
				}else {
					b[j]=scan.nextInt();
				}
			}
		}
		int[] result=addArray(a,b);
		*/
		for(int n:result) {
			System.out.println(n);
		}




	}

	public static int[] addArray(int[] arr1, int[] arr2) {
		int[] retArr = new int[arr1.length];

		for (int i = 0; i < retArr.length; i++) {
			retArr[i] = arr1[i] + arr2[i];
		}
		return retArr;
	}
}