質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

8316閲覧

入力された値が16進数かどうかの条件分岐について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2017/12/18 03:10

編集2017/12/18 03:10

###前提・実現したいこと
16進数または10進数の2つの整数の和を16進数と10進数で求めるコードを書いています。
入力された数が16進数だった場合は、10進数に直してから足し算をし、
入力された数が10進数だった場合はそのまま足し算をする
という分岐の時に、入力された数が16進数かどうかを判断する仕方がわからず困っています。

###該当のソースコード

java

1import java.util.Scanner; 2 3public class trial12_14 { 4 5 public static void main(String[] args) { 6 Scanner stdIn = new Scanner(System.in); 7 System.out.println("2つの整数の和か差を求めます。"); 8 //入力はa,b共に16進数かa,b共に10進数のどちらかと仮定する 9 System.out.println("aの値:"); int a = stdIn.nextInt(); 10 System.out.println("bの値:"); int b = stdIn.nextInt(); 11 System.out.println(a + b); 12 13 // 入力された値aとbが16進数かどうかを判断 14 if(a && b){ 15 //16進数を10進数に変更 16 int a_dec = Integer.parseInt(a, 16); 17 int b_dec = Integer.parseInt(b, 16); 18 int result_dec = a_dec + b_dec; 19 }else{ 20 int result_dec = a + b; 21 } 22 23 String result_hex = Integer.toHexString(result_dec); 24 System.out.print(result_hex); 25 System.out.print("(" + result_dec + ")"); 26 } 27 28}

###補足情報(言語/FW/ツール等のバージョンなど)
Eclipse Java EE IDE for Web Developers.

Version: Neon.3 Release (4.6.3)
Build id: 20170314-1500

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2017/12/18 03:19

例えば[10]という値が16進数か10進数かを見分ける方法はありません。どういう入力をするつもりでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/18 03:21

ご指摘いただきましてありがとうございます。16進数の場合は必ず0xを先頭につけて入力するようにします。
guest

回答2

0

その前に、どんな文字列なら10進/16進と見なすんですか? そこ書かんと答えようがないよ?

投稿2017/12/18 03:13

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/18 03:22

ご回答いただきましてありがとうございました。
guest

0

ベストアンサー

16進数であると確定できるのは、
・A~F がどこかの桁に存在する
ときのみです。逆に言うと、たとえば「50」という入力があった場合に、それが10進数の50なのか、16進数の50(10進数では80になる)なのか、判別する方法がありません。

ですから、こういう場合は入力される数値とは別に、それが10進数なのか16進数なのかを表すフラグか何かを別に渡してもらう必要があります。
※16進数である場合は必ず0xを前につけて入力させる、のもフラグの一種といえます

上のことはとりあえず無視して、16進数と確定できない場合は10進数として扱ってもよいなら、入力の中にA~F を含んでいるかどうかを調べればよいでしょう。
この場合入力は数値ではなく、文字列として受け取り、文字列としてA~Fを含むかどうか判定し、その後文字列から数値に変換します。

投稿2017/12/18 03:19

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/18 03:22

ご回答いただきましてありがとうございます。 16進数である場合は必ず0xをつけて入力するようにしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問