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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

3623閲覧

入力された文字の両端を入れ替えるプログラム

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/03/09 04:05

前提・実現したいこと

参考ReverseInteger
数字を3つ入力し、その1つ目と3つ目を入れ替えて
結果を返すというプログラムを書いています。
問題では、例では入力は3つの数になっていますが、テストケースでは
もしかしたら4つや5つなど入力数が増減するのかもしれないという懸念はあります。

123 //input 321 //output

現在のoutputに加えて、以下の二つを実行したいと考えています。

//入れ替えて0が先頭に来た場合は空白にする 120 21 //負の値が入力された場合は符号はそのままで入れ替える -321 -123

発生している問題・エラーメッセージ

「入れ替えて0が先頭に来た場合は空白にする」という処理では以下のコードでは
実行されないことと、
負の値が入力された場合は符号はそのままで入れ替える場合には配列を4つにして

if(nums[0] == "-"){ tmp = nums[1]; nums[1] = nums[3]; nums[3] = tmp; }

と分岐させるのが良いのでしょうか。

該当のソースコード

Java

1import java.util.Scanner; 2 3public class ReverseInt { 4 public static void main(String[] args) { 5 Scanner scan = new Scanner(System.in); 6 String num = scan.next(); 7 String[] nums = new String[3]; 8 //insert into arrays 9 for(int i = 0; i<3; i++){ 10 nums[i]=String.valueOf(num.charAt(i)); 11 } 12 13 //reverse 14 String tmp; 15 tmp = nums[0]; 16 nums[0] = nums[2]; 17 nums[2] = tmp; 18 if(nums[0] == "0"){ 19 nums[0] = " "; 20 } 21 22 for(int i = 0; i<nums.length; i ++){ 23 24 System.out.print(nums[i]); 25 } 26 27 } 28 29} 30

補足情報(FW/ツールのバージョンなど)

Eclipse Java EE IDE for Web Developers.
Version: Neon.3 Release (4.6.3)

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

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

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

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

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

fuzzball

2018/03/09 06:08 編集

この問題を読んで「数字を3つ入力し、その1つ目と3つ目を入れ替え」と認識していることが問題ですね。入力する数字は一つだし、「1つ目と3つ目を入れ替え」と捉えているから「もしかしたら4つや5つなど入力数が増減するのかもしれない」などという意味の分からない心配をすることになる。
guest

回答3

0

java

1public int reverse(int x) { 2 //絶対値を文字列化 3 StringBuffer sb = new StringBuffer(Integer.toString(Math.abs(x))); 4 //反転して数値化し、元値の符号を反映 5 return Integer.parseInt(sb.reverse().toString()) * (int)Math.signum(x); 6}

※オーバーフローについては考慮していません。

投稿2018/03/09 06:34

編集2018/03/09 06:37
fuzzball

総合スコア16731

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

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

0

ベストアンサー

単純な並べ替えならこれで十分でしょう。

String result = ""; for(int i = 0; i < num.length(); i++){ result = num.charAt(i) + result; } System.out.println(result);

先頭文字の「-」判定、並べ替え後の先頭「0」判定を入れると、

String result = ""; for(int i = 1; i < num.length() - 1; i++){ result = num.charAt(i) + result; } // 先頭0判定 char last = num.charAt(num.length() - 1); result = ((last == '0') ? ' ' : last) + result; // マイナス判定 char first = num.charAt(0); if(first == '-'){ result = first + result; }else{ result += first; } System.out.println(result);

投稿2018/03/09 04:36

tkturbo

総合スコア5572

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

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

0

nums[0]nums[num.length-1]をスワップすればいいと思いますよ。
負号が付いていればnums[1]ですね。

書いてみた

元のコードと全く違いますが。

Java

1import java.util.NoSuchElementException; 2import java.util.Scanner; 3 4class ReverseInt { 5 static String lstrip(String src, String removeChars) { 6 return src.replaceFirst( 7 String.format("^[%s]+", removeChars), "" 8 ); 9 } 10 static StringBuilder lstrip(StringBuilder src, String removeChars) { 11 return new StringBuilder( 12 lstrip(src.toString(), removeChars) 13 ); 14 } 15 16 static String reverse(String input) throws NumberFormatException { 17 Integer.parseInt(input); 18 StringBuilder builder = new StringBuilder(input); 19 20 boolean isNegative = builder.toString().startsWith("-"); 21 if(isNegative) { 22 builder = builder.deleteCharAt(0); 23 } 24 25 builder.reverse(); 26 builder = lstrip(builder, "0"); 27 28 if(isNegative) { 29 builder.insert(0, "-"); 30 } 31 32 return builder.toString(); 33 } 34 35 public static void main(String[] args) { 36 try(Scanner sc = new Scanner(System.in)) { 37 while(sc.hasNext()) { 38 String input = sc.nextLine(); 39 try { 40 System.out.println(reverse(input)); 41 } 42 catch(NumberFormatException e) { 43 System.out.println("\"" + input + "\" cannot be interpreted as an integer."); 44 } 45 } 46 } 47 } 48}

入力例

plain

112345 2-123 3hoge 41000 5-100

出力例 Wandbox

plain

154321 2-321 3"hoge" cannot be interpreted as an integer. 41 5-1

投稿2018/03/09 04:34

編集2018/03/09 05:58
LouiS0616

総合スコア35660

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

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

LouiS0616

2018/03/09 05:58 編集

当初は文字通り『先頭と末尾を入れ替える』方法を知りたいのだとの解釈の上で回答しました。 例えば 1234 ⇒ 4231 みたいな。
tkturbo

2018/03/09 06:41

単純に「先頭と末尾を入れ替える」なのか、「並び順を入れ替える」なのか、質問の意図が読み取れないですよね。。。>LouiS0616さん
LouiS0616

2018/03/09 06:46

ですね。 あと『100』が『 01』になるのか『 1』になるのかも不透明な気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問