(補足)キーボードからの入力について

 
Javaで のキーボードからの入力方法は、
 (1)全てのバージョンのJavaで利用できる方法(少し煩雑、参考書に載っている)
 (2)比較的新しいバージョンのJavaで利用できる方法(簡単Scannerクラスを使う)
の2種類がある。     
  
 1.基本的な方法(参考書に掲載されている)
 
・ 古いバージョンのJavaでも利用可能な方法
 - 少し面倒くさいが、どのバージョンでも利用できる
 - InputStreamReaderクラスを利用してキーボードから入力する
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
String str = br.readLine(); // キーボードで打ち込まれた文字列がstrに格納される

 
 - さらに、下記の青字の記述も追加する必要がある
import java.io.*;

class クラス名
{
  public static void main(String[] args) throws IOException
  {
      :
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();

   
int num = Integer.parseInt(str); // int型の数値に変換して代入
    double val = Double.parseDouble(str); // double型の数値に変換
  }
}
    
    
 2.もっと簡単な方法(参考書には載っていない)
 
・ Scannerクラスを利用すると、もっと簡単に書くことができる
 - Java8(2014年)以降の バージョンで利用可能
 
import java.util.Scanner;

class クラス名
{
  public static void main(String[] args)
  {
      :
    Scanner sc = new Scanner(System.in);

    String s1 = sc.next(); // 文字列型として取得(空白区切り)
    String s2 = sc.nextLine(); // 文字列型として取得(一行ごと)
    int num = sc.nextInt(); // int型の数値として取得
    double val = sc.nextDouble(str); // double型の数値として取得
  }
}
 
 
<サンプルプログラム1>
import java.util.Scanner;

class Sample0001
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);

    System.out.print("整数値を入力してください-->");
    int n = sc.nextInt();

    System.out.println("値 = " + n );
  }

 
<実行結果> 
C:\java>java Sample0001
整数値を入力してください-->3
値 = 3

C:\java>
 
 
<サンプルプログラム2>
import java.util.Scanner;

class Sample0002
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);

    System.out.print("整数値を3個、入力してください-->");
    int n1 = sc.nextInt();
    int n2 = sc.nextInt();
    int n3 = sc.nextInt();

    System.out.println(
       n1 + "*"
+ n2 + "*" + n3 + " = " + n1*n2*n3 );
  }

 
<実行結果>
 
C:\java>java Sample0002
整数値を3個、入力してください-->2 3 4
2*3*4 = 24


C:\java>
 
 
<サンプルプログラム3>
import java.util.Scanner;

class Sample0003
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);

    System.out.print("分子を入力してください-->");
    double d1 = sc.nextDouble();

    System.out.print("分母を入力してください-->");
    double d2 = sc.nextDouble();

    System.out.println( d1 + "÷" + d2 + " = " + d1/d2 );
  }

 
<実行結果>
 
C:\java>java Sample0003
分子を入力してください-->1.5
分母を入力してください-->4.5
1.5÷4.5 = 0.3333333333333333


C:\java>
 
 
<サンプルプログラム4>
import java.util.Scanner;

class Sample0004
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);

    System.out.print("aを入力してください-->");
    int a = sc.nextInt();

    System.out.print("bを入力してください-->");
    int b = sc.nextInt();

    int ans = a+b;
    System.out.println( " a + b = " + ans );
  }
}

 
<実行結果>
 
C:\java>java Sample0004
aを入力してください-->3
bを入力してください-->5
 a + b = 8

C:\java>
 

    
 3.日本語の入力について
 
・ コマンドプロンプトで日本語(全角文字)を入力する と、文字化けする場合がある
 - Windows11以降、文字コードの関係で正しく入力がされない(環境により異なる)
 - コマンドプロンプトの日本語(全角)文字入力はSJIS
 - Javaの標準入力で、デフォルトの文字コードが SJIS から UTF-8 に変更されたらしい

InputStreamReaderクラスは
 = new BufferedReader( new InputStreamReader( System.in ) );
  のところを
 = new BufferedReader( new InputStreamReader( System.in, "SJIS" ) );
  のように修正する

Scannerクラスは
 = new Scanner(System.in);
  のところを
 = new Scanner(System.in, "SJIS");
  のように修正する

 
<サンプルプログラム5(文字化けする例)>
import java.util.Scanner;

class Sample0005
{
  public static void main(String[] args)
  {
    System.out.print("全角文字を入力してください-->");
    Scanner sc = new Scanner(System.in);
    String str = sc.next();

    System.out.println("文字列 = " + str );
  }

 
<実行結果(文字化けする)> 
C:\java>java Sample0005
全角文字を入力してください-->あいうえお
文字列 = ??????????

C:\java>
 
 
以下ように修正する

<サンプルプログラム6>
import java.util.Scanner;

class Sample0006
{
  public static void main(String[] args)
  {
    System.out.print("全角文字を入力してください-->");
    Scanner sc = new Scanner(System.in, "SJIS"); // ここを変更する
    String str = sc.next();

    System.out.println("文字列 = " + str );
  }

 
<実行結果(文字化けしない)> 
C:\java>java Sample0006
全角文字を入力してください-->あいうえお
文字列 = あいうえお

C:\java>