プロが教えるわが家の防犯対策術!

javaで繰り返しforを用いて10進数123を8進数に変換するプログラムを作りたく思い質問にまいりました。
以下のような説明を受けましたが、うまくいきません。

10進数123を変数xに代入する
以下の手順を何回か繰り返すfor(int i=0; i < ?; i++)
a) xを8で割った余りを文字列変数yの前に追加. y = ?
b) xを8で割った商をxに代入する. x = ?
変数yを表示する.System.out.println(?)

何回繰り返すかは123を手計算で8進数にした時の数字で検討せよとのことなので
for(int i=0; i < 3; i++) でよいと思うのですが、
その後の手順a.bで手が止まってしまいます。

public class a {
public static void main(String[] args){
int x;
x=123;
int y;
y=7;
int z;
z=x%8;
x=x/8;
String s="y";
s=s+x;
s=s+z;
for (int i=0;1<3;i++){
System.out.println("y");
}
}
}

自分ではこのように作ってみたのですが思うように動作しません。
どの辺りをどう改善すべきなのか、どうかご指導ください。
よろしくお願い致します。

A 回答 (3件)

ではヒントを。


---------------------------------------------------------------------
以下の手順を何回か繰り返すfor(int i=0; i < ?; i++)
a) xを8で割った余りを文字列変数yの前に追加. y = ?
b) xを8で割った商をxに代入する. x = ?
変数yを表示する.System.out.println(?)
---------------------------------------------------------------------
ここで言う「以下の手順」とは a) と b) のはずです。
for文は "{" と "}" で括った中味を繰り返します。

以上、頑張って下さい。
    • good
    • 0

まず、コンピュータにとって整数を 10進数、8進数として扱うとは「表示上の問題」「入出力上の問題」となります。



(ユーザー)      (コンピュータ)      (画面)
10進数の数字 -入力→ 2進数で保持 -出力→ 8進数の数字

ということです。

なので、問題文は「8進数に変換せよ」ですが、実際に変換する必要はなく、「8進数で画面に表示せよ」ということです。

y は int ではなく String (あるいは StringBuilder)として宣言し、「8進表現」を組み立てて画面に表示して下さい。

# java.lang.System.out.printf でいいじゃないか。
    • good
    • 0

>どの辺りをどう改善すべきなのか、どうかご指導ください。


以下のコードでご確認ください。


 public static void main(String[] args) {
  String ans = getDecToOct( 123 );
  System.out.println( ans );
 }

 /**
  * 10進数を8進数に変換します
  * @param x 10進数のint型数値
  * @return 8進数に変換したString型文字列
  */
 public static String getDecToOct( int x ) {
  String y = "";
  for(int i=0, n=(int)(Math.log(x) / Math.log(8)); i<=n; i++) {
   int z = x % 8;
   x /= 8;
   y = z + y;
  }
  return y;
 }
    • good
    • 0

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