• 締切済み

javaでforを用いて進数を変換するプログラムについて

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"); } } } 自分ではこのように作ってみたのですが思うように動作しません。 どの辺りをどう改善すべきなのか、どうかご指導ください。 よろしくお願い致します。

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.3

>どの辺りをどう改善すべきなのか、どうかご指導ください。 以下のコードでご確認ください。  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;  }

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

まず、コンピュータにとって整数を 10進数、8進数として扱うとは「表示上の問題」「入出力上の問題」となります。 (ユーザー)      (コンピュータ)      (画面) 10進数の数字 -入力→ 2進数で保持 -出力→ 8進数の数字 ということです。 なので、問題文は「8進数に変換せよ」ですが、実際に変換する必要はなく、「8進数で画面に表示せよ」ということです。 y は int ではなく String (あるいは StringBuilder)として宣言し、「8進表現」を組み立てて画面に表示して下さい。 # java.lang.System.out.printf でいいじゃないか。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

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

関連するQ&A

  • Javaの初歩的なプログラムについて

    public class ForInFor{ public static void main(String[] args){ for(int i=1; i<=9; i++){ String a = ""; for(int j=1; j<=9; j++){ a += i * j + " "; } System.out.println(a); } } } を実行すると九九の表のようになりました。 println(a)の中のaはjの方のforの繰り返しが終わったら代入するものだと思っていましたので 戸惑っています。 実際にはどういう流れで九九の表ができるのでしょうか?

  • javaのプログラムについて

    質問させていただきます // 数値積分 class Integral1 { public static void main(String[] args) { final int n = 100; // 区間数 final double a = 0; // 始点 final double b = 1; // 終点 final double h = (b-a) / n; // 区間の幅 double x, y; double S = 0; // Sを0で初期化 int i; // 区間 for(i = 1; i <= n ; i++) { // 区間1からnまで x = a + h * i; // 区分積分 y = Math.sqrt(1-x*x); // yを計算 S += y * h; } System.out.println("S = " + S + " 4S = " + 4*S); } } これは区分積分法で計算する数値積分のプログラムなのですが、 これをシンプソン法に改造したプログラムに直していただきたいのですが・・・ どなたかお願いします

  • javaで素数を探すプログラム。

    javaで素数を探すプログラム。 初歩的なことかと思いますが、助言をお願いします。 if(a[i-1]) ←この部分がわかりません。これはどのような条件がなのでしょうか? class Prime { public static void main(String[] args) { int max = 100; // 素数を探す数の最大値 boolean[] a = new boolean[max]; // 素数かどうか判定する配列 // 配列の初期化 for(int i = 0; i < max; i++) a[i] = true; // 素数かどうか判定 for(int i = 2; i < max; i++) { if(a[i-1]) { for(int j = 2; i*j <= max; j++) a[i * j - 1] = false; } else continue; } // 結果を表示 for(int i = 1; i < max; i++) { if(a[i]) System.out.print((i + 1) + " "); } System.out.println(); } } このプログラム

    • ベストアンサー
    • Java
  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • javaのプログラム

    int型の配列の各要素に1~10の乱数を代入し、各要素の値を縦向きの*のグラフで表示するプログラムを作っているのですが、結果がランダムででるので、自分の書いたプログラムが正しいのかわかりません。ソースを載せますので合っているのか間違っているか教えて下さい。もし間違っているならどこが間違いなのか教えていただけると嬉しいです。よろしくお願いします。 ●ソース import java.util.Random; import java.util.Scanner; class Graph { public static void main(String[] args){ Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = 1 + rand.nextInt(10); for (int i = 1; i <= 10; i++){ for (int j = 0; j < n; j++) if (a[j] <= i) System.out.print("* "); else System.out.print(" "); System.out.println(); } } } ●実行例 要素数:12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    • ベストアンサー
    • Java
  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • java for文、if文を使っての三角形

    例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を   作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが   出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • javaで課題を出されています

    題名の通りなのですが、javaのプログラミングで課題を出されていて うまく書けません お題としては 1 if分と論理演算を使うこと。 2 forまたはwhileを使用すること 3 メソッドを使用すること。(main以外で) 4 配列を使用すること 以上なのですが、一応昔スロットプログラムを作っていたのでこれをベースに作ろうかなと考えています import java.io.*; public class Slot01{ public static void main(String[] args){ try{ //String line =reader.readLine(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("こんにちは!スロットゲームへようこそ!"); System.out.println("EnterKeyを押して当たりを出してくださいね!"); while(true){ //while文は処理を繰り返すためのものです。 // ▽これよりソースを打ち込んでください //try{ int x=(int)(Math.random()*9)+1; int y=(int)(Math.random()*9)+1; int z=(int)(Math.random()*9)+1; int[]kakuritu; int sum; System.out.print(x); System.out.print(y); System.out.print(z); System.out.println(""); String line =reader.readLine(); //System.out.println(""); if(x==7&&y==7&&z==7){ System.out.println("スーパー大当たり"); }else if(x==y&&y==z){ System.out.println("大当たり"); }else if(x==y||y==z||x==z){ System.out.println("小当たり"); }else{ System.out.println("外れ"); } }//while文の終わり }catch (IOException e){ System.out.println(e); }catch (NumberFormatException e){ System.out.println("正しい形式で表示してください。"); } } } このプログラムなのですが、1と2はこの中に入ってます。考えてみたのですが、このプログラムに当たり確率を表示させるプログラムなら3と4も満たせそうなのですが、いまいちソースが思いつきませんのでご教授お願いします。 文章おかしいところだらけで申し訳ありません。

    • ベストアンサー
    • Java
  • JAVAのプログラムについて

    独学でJAVAを勉強中なのですが、 import java.io.*; public class ExserciseD5L3_2{ public static void main(String args[]){ BufferedReader br = new BufferedReader(newInputStreamReader(System.in),1); try{ System.out.println("■■■計算クイズ■■■"); System.out.println("計算してください。"); String Que[] = {"10×50=?","21-7=?","360÷6=?"}; int Ans[] = {500,14,60}; int counter; for(counter = 0; counter <=2; counter++ ){ System.out.println(Que[counter]); System.out.println("答えは?"); String str = br.readLine(); int i = Integer.parseInt(str); if(i == Ans[counter]){ System.out.println("おめでとう!大当たりです。"); } else{ System.out.println("残念!答えは"+Ans[counter]+"です。"); } } } catch(IOException e){ System.out.println("IOエラーが発生しました。"); } catch(NumberFormatException ne){ System.out.println("入力された数値が正しくないようです。"); } } } これを実行すると ■■■計算クイズ■■■ 計算してください。 10×50=? 答えは? 500 おめでとう!大当たりです。 21-7=? 答えは? 14 おめでとう!大当たりです。 360÷6=? 答えは? 60 おめでとう!大当たりです。 となるのですが、これに おめでとう!正解数は3つです。とか正解数は2つですなどのように 正解数も出るようにするにはどのようにしたらいいのでしょうか?

    • ベストアンサー
    • Java