dポイントプレゼントキャンペーン実施中!

整数を逆にして出力する(例 12345 -> 54321)メソッドを書いています。
0が来る場合は0を飛ばします(12300->321)。
制約として、
・1234に50000を足して51234のようにして求めていくこと
・すでにあるpowerOfTenメソッド(整数を10乗の形に直すメソッド:例789→100)を使う
・再帰を使う
・nをString型に直してはいけない
があります。

以下のエラーで、intの使い方が間違っているようですが、どう考え直せば良いのかがわかりません。
初心者で見苦しいコードになっていますが、よろしくお願いいたします。


public int reverseDigits(int n) {

int lastNum = n.length(); //[ERROR] At box line: 003, int cannot be dereferenced.

for (int i = 0; i < lastNum; i++) {

int lowestNum = n%10;
if (lowestNum == 0) continue; //最後の文字が0のときは考えない

int numToAdd = lowestNum * powerOfTen(n); //50000を計算する

n = n.substring(0, lastNum -2); //1234を抜き出す
//[ERROR] At box line: 011, int cannot be dereferenced.

int result = numToAdd + n;
return result[0]; //[ERROR] At box line: 013, array required, but int found.
//先頭の文字(上記の5)を順に出力し、残りの文字でメソッドを繰り返す
reverseDigits(result.substring(1,lastNum -1)); //[ERROR] At box line: 014, int cannot be dereferenced

A 回答 (3件)

intにsubstring?????



int m=n%10
n = n/10
で下―桁ずつ取り出して
組立直すだけだから、ムチャ簡単だよ。
    • good
    • 0

String 型を使わない制約なので、変数 n は substring ではなく、数学的に処理しましょう。


例)
int a = 12345 / 10; // 12345 から 1234 を抜き出す (余りは切り捨て)
int b = 12345 % 10; // 12345 から 5 を抜き出す

再帰を使う制約なので、繰り返しは for 構文を使わずに処理しましょう。
例)
f(12345) = 5*10^4 + f(1234)
f(1234) = 4*10^3 + f(123)
f(123) = 3*10^2 + f(12)
f(12) = 2*10^1 + f(1)
f(1) = 1

再帰なので、終了条件を明確にしましょう
例)
f(0) から f(9) は、再帰しないでも答えが出る
    • good
    • 0

あまり実用性を感じない設問だから、Javaトレーニングの問題だね。



アルゴリズムをまとめる練習でもあるね。いくつか考えてみたらいいと思うよ。文字列にしないという制約はあってもやる事は同じだね。数値なんだから下桁のゼロは必然にそうなるよね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!