0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java初心者必見!なぜメソッドにScanner scannerを2回書くのか?

Posted at

Java初心者向け解説:なぜScanner scannerを2回書くの?

Javaでプログラムを書いていると、次のようなメソッド宣言を見たことがあるかもしれません。

private static void addTask(List<String> tasks, Scanner scanner)

「なぜ Scanner scanner を2回も書かなきゃいけないの?」と思ったことはありませんか?
この記事では、この疑問を初心者の方向けに分かりやすく解説します!


メソッドの基本構造を理解しよう

Javaのメソッドは、大きく分けて次の2つの部分から成り立っています。

  1. メソッド宣言(ヘッダー): メソッドの名前や引数を定義する部分。
  2. メソッドの処理(ボディ): メソッドが実際に行う処理。

例えば、以下のコードを見てみましょう:

private static void addTask(List<String> tasks, Scanner scanner) {
    String task = scanner.nextLine();
    tasks.add(task);
    System.out.println("タスクを追加しました: " + task);
}
  • メソッド宣言(ヘッダー):

    private static void addTask(List<String> tasks, Scanner scanner)
    
    • この部分では、メソッド名をaddTaskとし、引数として必要なデータを2つ(tasksscanner)受け取ることを指定しています。
  • メソッドの処理(ボディ):

    String task = scanner.nextLine();
    tasks.add(task);
    
    • 実際に引数から渡されたデータを使って処理を行っています。

なぜList<String> tasksScanner scannerが必要なの?

このメソッドでは、2つの引数を使っています。それぞれの役割は次の通りです。

1. List<String> tasks

タスクリストを管理するための引数です。

  • tasksは「今のタスクリスト」を指しています。
  • このメソッド内でタスクを追加すると、リスト自体が更新されます。

2. Scanner scanner

ユーザーの入力を受け取るための引数です。

  • ユーザーが入力した内容(新しいタスク)を取得するために使います。
  • 例えば、scanner.nextLine()を使って、キーボードからの入力を読み取ります。

なぜ引数を渡す必要があるの?

メソッドは、外部からデータを受け取ることで柔軟に動作します。
もし引数を渡さない場合、メソッド内でデータを使うことができません。

引数なしだとどうなる?

例えば、以下のように引数を使わないコードを書いた場合、tasksscannerが見つからずエラーになります。

private static void addTask() {
    String task = scanner.nextLine(); // エラー: scannerが定義されていません
    tasks.add(task); // エラー: tasksが定義されていません
}

引数を渡す場合

引数を渡せば、外部で作成したリストやScannerをメソッド内で利用できます。

List<String> tasks = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
addTask(tasks, scanner); // 引数として渡す

具体的な動き:どこでscannerを作成している?

次のコードを見てみましょう:

public static void main(String[] args) {
    List<String> tasks = new ArrayList<>(); // タスクリストを作成
    Scanner scanner = new Scanner(System.in); // Scannerを作成

    addTask(tasks, scanner); // リストとScannerを引数として渡す
}
  1. mainメソッドで、1つのScannerオブジェクトを作成しています。
  2. このScanneraddTaskメソッドに渡すことで、同じScannerを共有して使えるようにしています。

効率的な設計をする理由

1. 引数として渡す設計のメリット

  • 同じScannerオブジェクトを他のメソッドでも使い回せるため、メモリ効率が良い。
  • 1つのリストやScannerを複数のメソッドで共有できる。

2. 毎回作成する非効率な例

もし毎回Scannerを作成する設計にした場合、プログラムの効率が下がります。

private static void addTask(List<String> tasks) {
    Scanner scanner = new Scanner(System.in); // 毎回新しいScannerを作成
    String task = scanner.nextLine();
    tasks.add(task);
}
  • 毎回Scannerを新しく作ると無駄が多く、他のメソッドで共有もできません。

まとめ

private static void addTask(List<String> tasks, Scanner scanner) のように引数を2つ指定する理由は、必要なデータ(tasks)とツール(scanner)をメソッドに渡すためです。

ポイント

  1. List<String> tasks:
    • タスクを管理するリストを渡すことで、外部のリストを直接操作できる。
  2. Scanner scanner:
    • 1つのScannerを共有することで、効率的にユーザー入力を処理できる。

これを理解すれば、Javaのメソッド設計がもっと身近に感じられるはずです!
疑問があれば、ぜひコメントで教えてください😊


💡 もっとJavaの基本を知りたい方は、この記事をストックしていただけると嬉しいです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?