ゼロからプログラミングコンテスト!

プログラミング経験ゼロから、プログラミングコンテストに挑戦できるよう、応援するブログです。実践が一番!

Javaにおける入力について

これまでは、プログラムのコードの中で自分で数値を入力し、計算をして、その結果を出力しました。
しかしこれでは、1つのプログラムの動作は毎回同じですね。例えば、『何か数字を入れると、それを2倍してくれるプログラム』のような、一般性の高いものは書けません。
今回は、そのようなプログラムを書けるようになるために必要な、入力について説明します。
また、これからは入力に対応したプログラムを書くため、『プログラムのコード』だけでなく、『入力の形式』も間違わないようにしないといけません。
例えばこれからの練習で出力が変になった場合(めっちゃ桁の多い負の数になったりした場合)は、コードが間違えてるという理由以外に、入力の形式がコードに合っていないことが理由であることがあります。

整数1つを入力する方法

入力は、次のように書きます。

int n = sc.nextInt();

何が言いたいんだ!という感じですね。
プログラミングコンテストにチャレンジする際に、
この辺が分かりにくくて躓くことも多いと思います。
実際に使う例を見て、理解を深めましょう。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力から数字を一つ読み取って、nに入れる

		System.out.println(n); //nの中身を出力
	}
}

これを、AtCoderのコードテストで、『標準入力』のところに好きな数字(3など)を入れて実行してみて下さい。

このコードでは、標準入力に書いた数字と同じ数字が、そのまま出力されるハズです。



さて、実践の話に戻ります。
入力の書き方が分かったので、少し一般的なプログラムが書けるようになりました。
例えば、次のコードは、『入力された数字より1大きい数字を出力するプログラム』になります。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力から数字を一つ読み取って、nに入れる
		n++; //nに1を加える。省略記法ですね。
		System.out.println(n); //nの中身を出力
	}
}

AtCoder上で、標準入力のところに好きな数字を1つ書いて実行してみて下さい。
また、数字を色々変えてみて、ちゃんと動作することを確かめてください。例えば、入力を1とすると出力は2になりますね。

これはかなり簡単なプログラムですが、これが全ての基本の形となります。
以降のプログラムは基本的に、
1.何か数字を入力してもらう
2.計算する
3.入力に応じた出力をする
という形のものにしようと思います。

それではさっそく、1つ目の練習問題です。

☆練習問題1.上のプログラムの一部を変更して、『入力された数字を2倍にして出力するプログラム』を書いて下さい。また、AtCoder上で入力する数字を変えながら実行し、ちゃんと動作することを確かめてください(必ず、何個かの数字で試してみること!)。


さて、せっかくなので、次に『数字を複数入力する方法』について説明します。
上で説明した、一致がどうのこうのみたいな理解があると分かりやすいと思います。

複数の整数を入力する方法

上のコード内の

nextInt()

は、『標準入力に書かれている数字の1つ目を読み取る』という意味です。
複数の数字が書いてある場合、例えば、同じ行にスペースを入れて2つ数字がある

3 5

や、改行して2つの数字が書いてある

3
5

に関しては、1つ目のnextInt()では3を、2つ目のnextInt()では5を読み取ります。


説明ばかりではつまらないので、次のコードをAtCoderで実行して確かめてみましょう。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力から数字を一つ読み取って、nに入れる
		int m = sc.nextInt(); //mという変数を作り、標準入力から数字を一つ読み取って、mに入れる

		System.out.println(n); //nの中身を出力
		System.out.println(m); //mの中身を出力
	}
}

そして、標準入力は、

2 5

のパターンと

2
5

のパターンを試してみてください。


これで、2つの数字を入力できるようになりました。
例えば次のコードは、『数字を2つ入力されたら、その和を返すプログラム』になります。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力から数字を一つ読み取って、nに入れる
		int m = sc.nextInt(); //mという変数を作り、標準入力から数字を一つ読み取って、mに入れる

		int wa = n + m; //waという変数を作り、n + mの和を入れる

		System.out.println(wa); //waの中身を出力
	}
}

入力を

7 11

とすると、出力は『18』になりますね。他にも、色々入力を変えてみて、試してみて下さい。
ただし、数字を2つ入力すること、その間はスペース、もしくは改行で区切ることを忘れないようにして下さい。

それではここで、2つ目の練習問題です。

☆練習問題2.上のコードを一部変更して、入力された2つの数字の積(かけ算のことです)を出力するプログラムを書いて下さい。(例えば、4と6が入力されたら、4×6で24が出力されます)。また、AtCoderで、入力を色々変えて、動作が正しいか確認して下さい。 
※掛け算は『*』で表します、注意!

☆練習問題3.数字を4つ入力して、その4数の和を出力するプログラムを書いて下さい。これまでの問題に比べて難易度は高いです。例えば入力が

2 3 12 6

なら、出力は『23』になるハズです。
まずは上の4つの数字を入れて、23が出てくるか試してみてください。

今回はここで終わりです。
今回の説明内容は、かなり難しい内容なので、分かりにくいかも知れません。
そういった場合は、是非コメント等で質問や意見を頂けると嬉しいです。

以上です。
次の記事から、さらに複雑なコードを学んでいきます。