• ベストアンサー

Javaで素数の表を表示させたいのですが、うまく表示されません(>_<)

以前、Javaで素数の表を作ろうと、ここ↓ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1432689724 で助けをお願いし、数名の方からご回答をいただきました。 「うまく書けません」という曖昧な事を言ってしまい、申し訳なかったと思います。 とりあえず、書いてくださったコードを一字一句理解することから始めようと思い、回答してくださったある方のプログラムを実行してみました。 (「Sosuu→sosuu」とだけ変更しました。) ---------------- import java.awt.*; import java.awt.event.*; public class sosuu extends Frame { static final int N=200; int k,x,y; // (x,y) は 数字の表示位置 public sosuu() { setTitle("エラトステネスの篩(ふるい)により素数を求める"); setLocation(170,0); setBackground(Color.WHITE); //画面を閉じるための処理 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void paint(Graphics g) { Font f=new Font("MS 明朝",Font.BOLD,12); g.setFont(f); // フォントの設定 g.setColor(Color.red);// 数字を赤で表示 //初めはすべて赤字で表示 for (int i=0; i<20; i++) { for (int j=1; j<=10; j++) { x=10+50*j; y=100+i*25; int k; k=10*i+j; // 数字を揃えて表示するための操作 // subString(int beginindex, int endindex)は部分文字列を返す // beginindexは取りだす最初の文字位置、endindexは取りだす最後の文字位置 String str = " "+k; str =str.substring(str.length()-4,str.length()); g.drawString(str,x,y); } } //素数でないものを青字で表示 k=(int)Math.sqrt(N);// N までの素数を求めるとき, sqrt(N)までの数の // 倍数であるかどかを調べれば十分 g.setColor(Color.blue);//素数でない 数を青で表示 String str = new String(); //1は素数でないので除く str = " 1"; str =str.substring(str.length()-4,str.length()); g.drawString(str,60,100); for (int i=2; i<=k; i++) { int n=i; //iの整数倍 int nn=0;//iの倍数を作るのために while(n<=N){//N以下の時続ける x=60+50*((n-1)%10); //横の位置 y=100+25*((n-1)/10);//縦の位置 //初めてでてきた数値は素数、それ以外は素数でない if(n != i){ str = " "+n; str =str.substring(str.length()-4,str.length()); g.drawString(str,x,y); } n=i*(++nn); } } } public static void main(String[] args) { //インスタンスの生成 sosuu so=new sosuu(); //画面のサイズ so.setSize(630,650); //描画(つまりpaint()を呼ぶ) so.setVisible(true); } } ---------------- を、Eclipse(3.2.2)に貼り付けて、「実行→実行→Javaアプリケーション」で、アプレットを起動させてみました。 すると、何も表示されない真っ白な画面が出てきたのです(ToT) コードのどこかが間違っているのでしょうか? エラーがあると、豆電球にバッテンマークみたいなものが表示されると思うのですが、特にそういったものは表示されません。 何が原因で、アプレットを起動しても真っ白な画面しか出てこないのか、ご教授いただければ幸いです(>_<) よろしくお願いします<m(__)m>

  • dj-s
  • お礼率81% (228/280)
  • Java
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#2>この行で例外を吐いているみたい。 #2>>   str =str.substring(str.length()-4,str.length()); ああ、それなら、きっと単純な話です。 少なくとも以下の3箇所、strに値をセットしている部分の、空白が4文字以上ありますか? 空白を ロ で表すとこんな感じ。 String str = "ロロロロ"+k; str = "ロロロロ1"; -------以下コード引用----- String str = " "+k; //1は素数でないので除く str = " 1"; str = " "+n;

dj-s
質問者

お礼

いや、ないですね。「String str = "ロロロロ"+k;」の方は、半角1文字、「str = "ロロロロ1";」の方も、半角1文字しかありません。 osu_neko09さんのご回答を参考に、3箇所のstrを、空白4文字以上にしてみました。 ・・・// beginindexは取りだす最初の文字位置、endindexは取りだす最後の文字位置 String str = "    "+k; ・・・//1は素数でないので除く str = "    1"; ・・・//初めてでてきた数値は素数、それ以外は素数でない if(n != i){ str = "    "+n; すると、問題なく表示されたのです! すいません、もしよろしければ、理由の方を、教えていただけないでしょうか?

その他の回答 (3)

回答No.4

エラー拝見しました。同じものが何度か出力されているので、長くなっているようです。さて、エラーが出力されているのが下記の行、 str =str.substring(str.length()-4,str.length()); 日本語で書けばこんな感じでしょう。   変数strに、変数strの一部分を抽出してセットせよ。抽出する一部分は、   beginIndex:(変数strの現在の長さから4文字を引いた値)文字目から、   endIndex:(変数strの現在の長さ)文字目、つまり末尾まで、とする。 さて、空白の個数が4個ないと(3個でもいいのか)、(変数strの現在の長さから4文字を引いた値)が負になってしまいます。 substringで抽出する際には、以下の制限があるのです。 beginIndex が負の値である場合、endIndex がこの String オブジェクトの長さより大きい場合、あるいは beginIndex が endIndex より大きい場合には、例外IndexOutOfBoundsExceptionとする なお、下記のURLのJava レファレンスに、substringの仕様が書かれています。ご参考まで。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#substring%28int,%20int%29

dj-s
質問者

お礼

返信がすごく遅くなってすいません(>_<) 皆様の回答の内容が、私にとって高度だったので、Javaの本を一冊勉強してから回答しようと思いました。 リンク先も拝見したのですが、「substringで抽出する際の制限」について、あんまり理解できませんでした。そもそも、substring自体が何なのかよくわからないレベルですからね(汗)・・・クラスらしいですが・・・。 もう少し勉強してから、osu_neko09さんの回答をじっくり検討したいと思います。 ありがとうございました<m(__)m>

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

> を、Eclipse(3.2.2)に貼り付けて、「実行→実行→Javaアプリケーション」で、アプレットを起動させてみました。 このプログラムを見た限り、Javaアプレットではありません。 Javaアプリケーションです。 > すると、何も表示されない真っ白な画面が出てきたのです(ToT) 実行すると、例外を吐いているみたいですよ。 内容を確認して、コードを修正しましょう。 Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException : String index out of range: -2     at java.lang.String.substring(String.java:1931)     at sosuu.paint(sosuu.java:37) この行で例外を吐いているみたい。 >        str =str.substring(str.length()-4,str.length());

dj-s
質問者

お礼

あっ、そうですね、アプレットとアプリケーションは同じものだと思ってたのですが、「実行」メニュー→「実行」と進むと、確かに「Javaアプリケーション」と書いてますね! というか、すごいですね! 最初の4行でエラーの場所がわかるのですね(驚) 申し訳ないのですが、Javaの勉強を始めて半年の未熟者で、どう修正すればよいのかさっぱりなのです(>_<) よろしければ、修正方法を教えていただけないでしょうか?

回答No.1

画面を見る限り、なにかエラーが発生していますので、 コンソールに赤字(と青字)で表示されている内容を補足で教えてください。

dj-s
質問者

補足

すいません、すごく長く文字数制限に引っ掛かってしまうので、こちら↓ http://onnsei-okiba.radilog.net/article/481678.html をご覧いただければ幸いです。 よろしくお願いします<m(__)m>

関連するQ&A

  • java

    Base64にエンコードしたものをデコードするプログラムです。(汎用性が低いのは仕様です)コンパイルは通ったのですが、実行したら以下のエラーが出てきました。 C:\Users\Owner\Documents\javadev>java Base64Decode2 hello.dat hello2.txt java.lang.ArrayIndexOutOfBoundsException: 97 at Base64Decode2.decode(Base64Decode2.java:51) at Base64Decode2.main(Base64Decode2.java:23) 指定の行を見ても原因がよく分かりません。とても初歩的な質問なのかもしれませんが、お願いします。 以下がプログラムコードです import java.io.*; public class Base64Decode2 { public static void main(String[] args) { // 変換テーブル char[] table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; InputStream in = null; // 入力データ OutputStream out = null; // 出力先 try { in = new FileInputStream(args[0]); out = new FileOutputStream(args[1]); char[] cs; while ((cs=read4(in)) != null) { int[] buf = decode(cs, table);//ここが問題? for (int i=0; i<buf.length; i++) { System.out.print(buf[i]+", "); } System.out.println(); int[] buf2 = convert6to8(buf); write3(out, buf2); } } catch (Exception e) { e.printStackTrace(); // 例外の情報を表示する } finally { // in, out を閉じる try { in.close(); out.close(); } catch (Exception e) { } } } /** * 8ビットの2進数の列を復号化する. * @param cs * @param table 符号テーブル * @return */ public static int[] decode(char[] cs, char[] table) { int[] buf = new int[cs.length]; for (int i=0; i<buf.length; i++) { buf[i] = table[cs[i]];//ここが問題? } return buf; } public static int[] convert6to8(int[] buf) { String b; int[] buf2; if (buf.length == 2) { b = toBinary(buf[0], 6); buf2 = new int[1]; buf2[0] = fromBinary(b.substring(0, 8)); } else if (buf.length == 3) { b = toBinary(buf[0], 6) + toBinary(buf[1], 6); buf2 = new int[2]; buf2[0] = fromBinary(b.substring(0, 8)); buf2[1] = fromBinary(b.substring(8, 16)); } else { b = toBinary(buf[0], 6) + toBinary(buf[1], 6) + toBinary(buf[2], 6); buf2 = new int[3]; buf2[0] = fromBinary(b.substring(0, 8)); buf2[1] = fromBinary(b.substring(8, 16)); buf2[2] = fromBinary(b.substring(16, 24)); } return buf2; } /** * バイト列 bt の数を順に出力する. * @param bt 数の配列。長さは 3以下. 各数は8ビットの整数 */ public static void write3(OutputStream out, int[] bt) throws IOException { for (int i=0; i<3; i++) { if (i<bt.length) { out.write(bt[i]); } } } /** * in から文字を最大4つ読み出す. * @param in 入力ストリーム * @return 文字の配列。配列長は最大4. 入力終了したときには null を返す. */ public static char[] read4(InputStream in) throws IOException { char[] bs; int n0=in.read(); int n1=in.read(); int n2=in.read(); int n3=in.read(); if (n0 < 0) { // 読み込み終了 bs = null; } else if (n2 < 0 || (char) n2=='=') { bs = new char[2]; bs[0] = (char) n0; bs[1] = (char) n1; } else if (n3 < 0 || (char) n3=='=') { bs = new char[3]; bs[0] = (char) n0; bs[1] = (char) n1; bs[2] = (char) n2; } else { bs = new char[4]; bs[0] = (char) n0; bs[1] = (char) n1; bs[2] = (char) n2; bs[3] = (char) n3; } return bs; } /** * 数を読み取って、nビットの2進数を表す文字列に変換する * @param bt 1バイトの数 * @param n 2進数のビット数 * @return 2進数を表す文字列 */ public static String toBinary(int bt, int n) { String s = Integer.toBinaryString(bt); for (int i=s.length(); i<n; i++) { s = "0" + s; } return s; } /** * 2進数を表す文字列を数に変換する * @param b 2進数を表す文字列 * @return b が表す数 */ public static int fromBinary(String b) { return Integer.parseInt(b, 2); } }

    • ベストアンサー
    • Java
  • LU分解を利用した逆行列のプログラム(Java)

    LU分解を利用した逆行列のプログラムが作れません… というか、作ったのですが実行するとエラーが出てしまいます(´Д`;) どこをどう直せばいいか、もしくはこのようにプログラムした方が効率がよい などのアドバイスどなたか下さい double a[][]={{2,5,4}, {2,3,-1}, {6,9,28}}; int N=a.length; double[][] s=new double[N][N]; for(int k=0; k<a[0].length-1; k++){ for(int i=k+1; i<N; i++){ s[i][k]=a[i][k]/a[k][k]; a[i][k]=s[i][k]; for(int j=k+1; j<N; j++){ a[i][j] -= s[i][k] * a[k][j]; } } } double[][] y=new double[N][N]; double[][] X=new double[N][N]; double[][] e=new double[N][N]; for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if(i==j){ e[i][j]=1; }else{ e[i][j]=0; } } } for(int i=0;i<N;i++){ y[1][i]=e[1][i]; for(int k=2;k<=N;k++){ for(int j=1;j<=N;j++){ y[k][i]=e[k][i]-s[k][j]*y[j][i]; } } X[N][i]=y[N][i]/a[N][N]; for(int k=N-1;k>=1;k--){ for(int j=k+1;j<=N;j++){ X[k][j]=(y[k][j]-s[k][j]*X[j][i])/a[k][k]; } } } for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ System.out.printf(" %6.5f ", X[i][j] ); } System.out.println(""); }

  • 座標をランダムに表示させてx座標順にソートするプログラムを考えています

    座標をランダムに表示させてx座標順にソートするプログラムを考えています とりあえず、以下の様に決まった数の座標でソートすることはできたのですが、ランダムにするとなるとどうすればいいのかわかりません。 ------------------------------------------------- #include <stdio.h> int makepoints(int * pn, double * x, double * y){ double xp,yp; int k; int i,j; int n; n = 7; *pn = n; xp = 1; for(k=0;k<n;k++) { xp = xp/2; yp = xp*xp; x[k] = xp; y[k] = yp; } printf("初期座標列:\n"); for(k=0;k<n;k++) { printf("%f_%f\n",x[k],y[k]); } for(j=1;j<n;j++) { for(i=0;i<j;i++) { if(x[i]>x[j]){ xp=x[i];x[i]=x[j];x[j]=xp; yp=y[i];y[i]=y[j];y[j]=yp; } } } printf("整列後の座標列:\n"); for(k=0;k<n;k++) { printf("%d %f %f\n",k ,x[k],y[k]); } return 0; } ------------------------------------------------- なんとなくrand関数を使えばいいのかな、というのはわかるのですが、プログラミングに弱く困っています。 この後のプログラミング教えてくださる方いればよろしくお願いします。

  • java 素数判定

    入力した数字が整数か否かを判定するjavaプログラムを作っています。 以下の通りコンパイルして実行しました。これだと実行したときに どんな数字を数字を入力しても「31は素数です。 」となります。 入力した数字を判定させるにはどのようにしたらいいのでしょうか? class Sosuu { public static void main (String[] args) { int n = 31; boolean isPrime = true; for (int i = 2; i <= n - 1; i++) if (n % i == 0) { isPrime = false; break; } if (isPrime) System.out.println(n + " は素数です。"); else System.out.println(n + " は素数ではありません。"); } }

    • ベストアンサー
    • Java
  • 配列のエラーに関して

    java言語を用いて,Householder変換を用いた固有値の数値計算に挑戦してみました.しかし,次のようなエラーが発生し上手くいきません.どなたかこの問題を解決するためにお力をかしていただけないでしょうか. ----------エラー内容-------------------------------------------------------------------------------- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at Out.Mhouse(House.java:90) at House.main(House.java:10) ---------------------------------------------------------------------------------------------------- //Householder変換 public class House{ public static void main(String[] args){ double[][] A = new double[3][3]; int n = A.length; Out out = new Out(); for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ if(j < n-1){ System.out.print(out.Mhouse(A)[i][j] + " "); }else if (j == n-1) System.out.println(out.Mhouse(A)[i][j]); }; }; }; }; class Out{ double[][] outpro(double[] x){ int n; n = x.length; double[][] A = new double[n][n]; for(int i = 0;i < n;i++ ){ for(int j = 0;j < n;j++){ A[i][j] = x[i] * x[j]; } } return A; }; double[][] Msca(double a,double[][] A){ int n = A.length; for(int i = 0;i < n; i++){ for(int j = 0;j < n;j++){ A[i][j] = a * A[i][j]; } } return A; }; double selfpro(double[] x){ double a = 0; int n = x.length; for(int i = 0;i < n; i++){ a = a + x[i] * x[i]; }; return a; }; double[] minus(double[] x, double[] y){ int n = x.length; double[] z = new double[n]; for(int i = 0;i < n;i++){ z[i] = x[i] - y[i]; }; return z; }; double[][] house_1(double[] x){ int n = x.length; double[][] A = new double[n][n]; for(int i=0;i < n;i++){ for(int j = 0;j < n;j++){ if(i == j){ A[i][j] = 1 - Msca(2/selfpro(x),outpro(x))[i][j]; }else{ A[i][j] = - Msca(2/selfpro(x),outpro(x))[i][j]; }; }; }; return A; }; double[][] house_2(double[] x){ double[][] z = new double[1][1]; z[1][1] = 1 - 2; return z; }; double[][] Mhouse(double[][] A){ int n = A.length; double[][] H = new double[n][n]; for(int i = 0;i < n;i++){ double[] x = new double[n-i]; double[] y = new double[n-i]; double[][][] L = new double[i][n-i][n-i]; for(int j = 0;j < n-i;j++){ x[j] = A[i][i+j]; if(j == 0){ y[j] = 1; }else{ y[j] = 0; }; x[j] = y[j] - x[j]; }; if(i < n-1){ L[i] = house_1(x); for(int k = 0;k < n-i;k++){ for(int l = 0;l < n-i;l++){ H[i+k][i+l] = L[i][k][l]; }; }; }else if(i == n-1){ L[i] = house_2(x); for(int k = 0;k < n-i;k++){ for(int l = 0;l < n-i;l++){ H[i+k][i+l] = L[i][k][l]; }; }; }; }; double[][] B = new double[n][n]; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ for(int k = 0;k < n;k++){ B[i][j] = H[i][k] * A[k][j]; }; }; }; return A; }; };

    • ベストアンサー
    • Java
  • char→10進数

    PICのプラグラムをC言語で書いています。 unsigned charでxを宣言して、xには電圧をAD変換した値(8bit)が代入されます。このxの値を10進数に変換したいのですが、char型をどうすればint型に変換すればいいのか分かりません。 自分なりに作ってみましたが、うまく動作しません。ご教授よろしくお願いします。 /*抜粋*/ unsigned char x; int y,i; float n; ・・・ y=0; for(i=7;i>=0;i--){   n=(((x>>i)<<7)>>7);   if(n==1)n=pow(2,i);   y=y+(int)n; }

  • javaの簡単な質問です

    学校の課題で、ループ文を使い、1-6までのカードを順に引いた場合、起こりうるパターンを全て表示するプログラムを作りなさいというのが出ました。 六枚全てを引くのだけではなく、一枚や二枚、五枚だけ引くというのもあるので、720+360+120+30+6通りがあります 下が作ったものなのですが、うまくいきません。 こういった場合、どのようなコードを書けばよいのでしょうか?for文で実現可能なのでしょうか?whileで同じ数字が出なくなるまで++するような形にするほうが良いのでしょうか? プログラミング初心者で、よくわかっていないです。すみません。どなたか助けてください。 *printsは表示処理を行う関数です public static void main(String[] args){ int[] numbers=new int[6];; for(int i=0;i<numbers.length;i++){//1 for(int j=0;j<numbers.length-1;j++){//2 int o=(i+j+1)%6; prints(numbers[i],numbers[o]); for(int k=0;k<numbers.length-2;k++){//3 int p=(o+k+1)%6; prints(numbers[i],numbers[o],numbers[p]); for(int l=0;l<numbers.length-3;l++){//4 int q=(p+l+1)%6; prints(numbers[i],numbers[o],numbers[p],numbers[q]); for(int m=0;m<numbers.length-4;m++){//5 int r=(q+m+1)%6; prints(numbers[i],numbers[o],numbers[p],numbers[q],numbers[r]); for(int n=0;n<numbers.length-5;n++){//6 int s=(r+n+1)%6; prints(numbers[i],numbers[o],numbers[p],numbers[q],numbers[r],numbers[s]); } } } } } } private void prints(int... num){ for(int i=0;i<num.length;i++){ System.out.print(num[i]); } } }

  • C言語で連立1次方程式

    C++で連立1次方程式を解くプログラミングを作りたいのですが何回やっても出来なかったので質問します。 N=3; n=N; 0<=i<=N-1, 0<=j<=N-1, A(3×3行列)= 1 -8 -6 8 7 8 -2 -2 7 a[0][0]*X+a[1][0]*Y=(-1)*a[2][0]; (1X+8Y=-(-2)) a[0][1]*X+a[1][1]*Y=(-1)*a[2][1]; (-8X+7Y=-(-2)) (行をi、列をj、a[0][0]=a[i][j]) (XとYや関数名は適当に決めてもらって構いません) X、Yを求める。 XとYが求まったら1行目をX倍した数と2行目をY倍した数と3行目を足した数を、3行目に入れる。(計算は列ごとにやる(3回計算)) 3行目の成分は分数で表示させる。(整数の形にできるのなら整数の形にしたい) 表示させる関数は↓のように作りました(型はintでなくてもいいです) void matrix_print(int n, int a[N][N]){ int i, j; for(i=0; i<n; i++){ for(j=0; j<n; j++) printf("%5d \n",a[i][j]); } printf("\n"); return; } 私はX、Yで分数が出てきたところでうまく分数表示が出来ずに(整数で表せるなら整数で表したい)そこで詰まってしまいます。 何方かわかる方はプログラムを作ってください。お願いします。

  • 数独を解くアルゴリズム

    バックトラック法で解いているのですが、どこがおかしいのか見当もつかないので教えてください。 コンパイルエラーはありません。 表示の関数は省いてあります。 よろしくお願いします。 #include <stdio.h> #define M 3 //小さいブロックのサイズ #define N M*M //全体のサイズ #define MTX N*N //全体のマス数 int sudoku[N][N]={    {0,2,4,5,0,0,6,0,0},    {0,0,6,3,2,0,0,0,4},    {0,0,5,0,9,0,0,8,3},    {0,0,8,4,0,3,0,0,1},    {0,6,1,9,0,0,4,3,0},    {7,0,0,1,0,0,5,0,0},    {8,3,0,0,4,0,9,0,0},    {4,0,0,0,3,5,8,0,0},    {0,0,7,0,0,9,3,4,0}    }; /* 候補がOKかどうかチェック */ int OKkouho(int x, int y, int k) {    int i,j;    int p,q;    for(i=0; i < N; i++){ //その行に候補は入るか       if(sudoku[y][i] == k)          return 0;    }    for(j=0; j < N; j++){ //その列に候補は入るか       if(sudoku[j][x] == k)          return 0;    }    p = x/M*M;    q = y/M*M;    //そのブロックに候補は入るか    for(j = q; j < q+M; j++){       for(i = p; i < p+M; i++){          if(sudoku[j][i] == k)             return 0;       }    }    return 1; } void Solve(int level) {    int k;    int x,y;    if(level >= MTX){       printf("OK");       return;    }    x = level%N;    y = level/N;    if(sudoku[y][x])       Solve(level+1);    else{       for(k = 1; k <= N; k++){          if(OKkouho(x,y,k)){             sudoku[y][x] = k;             Solve(level+1);             sudoku[y][x] = 0;             }       }    } } int main(void) {    Solve(0);    return 0; }

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