2023.03.08
Javaプログラミング
キーボード入力した値を2乗(自乗)
Scannerクラスで入力された値をint型の変数に代入し、その値どうしを掛け算して2乗の値を計算しています。
ソースコードを簡単にするために、キーボードで入力した値が整数値であるかを判定する処理は入れていません。そのため、整数以外の値を入力するとプログラムが強制終了します。
以下は、プログラムで2乗計算を実行する例です。
実行例
整数を入力してください 20
出力結果
20の2乗は、400
Javaソースコード
int型の変数で2乗計算を行うソースコード
Scantoint1_Sqr.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
import java.util.Scanner; public class Scantoint1_Sqr { public static void main( String[] args ) { // メッセージを表示 System.out.println( "整数を入力してください" ); // Scannerを作成 Scanner scan = new Scanner( System.in ); // 入力された値をint型の値に変換して変数に代入 int value = scan.nextInt(); // valueの2乗を計算 int value2 = value * value; // 変数value2の値をコンソール出力 System.out.println( value+ "の2乗は、" + value2 ); } }
実行結果
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Scantoint1_Sqr.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Scantoint1_Sqr
実行例1
C:\talavax\javasample>java Scantoint1_Sqr 整数を入力してください 8
出力結果
8の2乗は、64
実行例2
C:\talavax\javasample>java Scantoint1_Sqr 整数を入力してください 1000000
出力結果
1000000の2乗は、-727379968
入力した整数1000000を2乗した値1000000000000が出力されずに、-727379968が出力されます。
このソースでは、2乗をint型どうしの掛け算で計算しています。
int型の変数が持てる最大値は2,147,483,647なので、計算値がこの値を超える場合は、オーバーフローとなり正確な計算結果が変数に代入されません。
次のソースは、このオーバーフローを少しだけ解消するものです。
int型変数の値をlong型に変換して2乗計算を行うソースコード
Scantoint1_Sqrl.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
import java.util.Scanner; public class Scantoint1_Sqrl { public static void main( String[] args ) { // メッセージを表示 System.out.println( "整数を入力してください" ); // Scannerを作成 Scanner scan = new Scanner( System.in ); // 入力された値をint型の値に変換して変数に代入 int value = scan.nextInt(); // valueの2乗を計算(int→longに型キャスト) long value2 = (long)value * (long)value; // 変数valueの値をコンソール出力 System.out.println( value+ "の2乗は、" + value2 ); } }
実行結果
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Scantoint1_Sqrl.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Scantoint1_Sqrl
実行例1
C:\talavax\javasample>java Scantoint1_Sqrl 整数を入力してください 8
出力結果
8の2乗は、64
実行例2
C:\talavax\javasample>java Scantoint1_Sqrl 整数を入力してください 1000000
出力結果
1000000の2乗は、1000000000000
このソースでは、2乗をlong型どうしの掛け算で計算しているので正しい計算結果が出力されます。入力されたint型をlong型に変換(型キャスト)して計算しています。ただし、long型の最大値は92,23,372,036,854,775,807なので、この値を超える計算結果になる場合はオーバーフローします。
Javaソースコードの解説
int型の変数で2乗計算を行うソースコード
001
import java.util.Scanner;
003
public class Scantoint1_Sqr {
クラス名を、Scantoint1_Sqrとしています。
004
public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
005 006
// メッセージを表示 System.out.println( "整数を入力してください" );
printlnメソッドで、メッセージ”整数を入力してください”をコンソール出力しています。
008 009
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
011 012
// 入力された値をint型の値に変換して変数に代入 int value = scan.nextInt();
nextIntメソッドで、キーボードから入力された1行を読み取り、その値をint型の変数valueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数valueに格納されます。
キーボードの"Ctrl"キーを押しながら"C"を押すと強制終了します。
014 015
// valueの2乗を計算 int value2 = value * value;
017 018
// 変数value2の値をコンソール出力 System.out.println( value+ "の2乗は、" + value2 );
変数value2の値をprintlnメソッドでコンソール出力しています。
int型変数の値をlong型に変換して2乗計算を行うソースコード
014 015
// valueの2乗を計算(int→longに型キャスト) long value2 = (long)value * (long)value;
以上です。