Javaで、"abc"と入力したら"cba"、"asdfghjkl"なら"lkjhgfdsa"と変換するプログラムを作りたいです。右のものから順に文字を記述する感じです。
私の考えで間違っているところを教えていただき、具体的なコードの例を挙げていただきたいです。
よろしくお願いします。
#考えたパターン
ケース1
文字列を"abc"だとする。"abc"という文字列を固定するとして一番最後の文字、最後から2番目の文字、最後から3番目の文字というふうに抽出していく方法。つまり、n回目のターンであることを記述し、s.substring(s.length()-(1+n), s.length()-(1+n))
で1文字抽出する。これは、n回目のターンであることを組み込むことができなかった。
ケース2
文字列を"abc"だとして、"c"を出力したら"c"を削除し、"ab"にする。"b"を出力したら削除し、"a"にする。"a"を出力したら"a"を削除し空の文字列にする。つまり、s.substring(s.length()-1)
で文字を抽出し、文字の最後を削除するコードと、文字列を更新し保存するコードが必要になるが、削除するコードがマニュアルにないことと、"c"を出力したら文字列が"c"になってしまい"ab"が消えてしまうので削除するコードの位置をどうすればいいのかわからなかった。
どの構文を使うか
if
は試したがケース1のようにn番目である記述を組み込むことができなかったり、ケース2のように削除するコードを調べても見つけられない&どの位置に削除するコードを組み込めばいいのかわからなかった。↓に挙げるどれよりもif
が一番よさそう。
Java
1Scanner scn = new Scanner(System.in); 2String s = scn.next(); 3 4int i = s.length(); 5if(i>0){ 6 s = s.substring(i-1); 7 System.out.print(s); 8 i--; 9}else{ 10 throw new IndexOutOfBoundsException("err"); 11} 12 13//出力は最後の1文字のみ 14//s = s.substring(i-1)は、s = s.substring(s.length()-1)と同様の出力だった
for
はif
と同様の問題点。とくにケース1では条件式のところに何回目であるかの記述を書けないと厳しいと思ったので、わからなくなった。例外処理の書き方も不明。
Java
1Scanner scn = new Scanner(System.in); 2String s = scn.next(); 3 4for(int i = s.length(); i > 0; i--){ 5 s = s.substring(i-1); 6 System.out.print(s); 7} 8//出力は最後の1文字のみ 9//s = s.substring(i-1)は、s = s.substring(s.length()-1)と同様の出力だった
switch-case
は文字列の文字数がわからずcaseを書きようがなかった。繰り返し処理でcaseの数を増やせるとしても複雑になってしまいそうなのでやめた。caseをすべて実行してくれるという特性(があったきがした)をうまく使うこともできなさそう。try-catch
は例外処理を記述しなければならなくとも、繰り返し処理がメインの今回は違うと思った。while
は、for
やif
ほど触れたことはないが、それらで処理できないのなら無理な気がした。
回答4件
あなたの回答
tips
プレビュー