• 締切済み

九九のプログラム

public class kuku{ public static void main(String[] args){ int[][] hyou=new int[10][10]; System.out.print(" "); int i; int yoko; for(i=1;i<hyou.length;i++){ yoko=(int)(Math.random()*10); hyou[i][0]=yoko; System.out.print(" "+hyou[i][0]); } System.out.println(); int j; int tate; for(j=1;j<hyou[0].length;j++){ tate=(int)(Math.random()*10); masu[0][j]=tate; System.out.println(hyou[0][j]); }}} これを実行すると乱数がダブって表示されてしまうのですが、ダブらないようにし、appletで実行できるようにしたいのですがどのように直したらいいのでしょうか。どなたかアドバイスください。

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

みんなの回答

  • isi0611
  • ベストアンサー率34% (46/134)
回答No.2

こんばんは~!九九の計算は乱数使わないといけないでしょうか? こんな単純なやり方はダメですかね? public class kuku { public static void main(String[] args) { for(int i=1; i<=9; i++){ for(int j=1; j<=9; j++){ System.out.print("\t"); System.out.print(i*j); } System.out.println(); } } }

ia080024
質問者

お礼

回答ありがとうございます。

  • yokkou
  • ベストアンサー率30% (34/111)
回答No.1

乱数生成というのを勘違いされている気がします。 1~10の乱数を生成 といった際に、生成されるのは  1~10までの数字を並び替えた結果 ではなく  1~10の数字のどれか です。 よって、ダブります。 自分ならば、 初めに1~10を格納した配列を用意し 最初は1~10(実際は0~9ですが)の乱数で指定された箇所の値を取得し 取得した箇所以降の数字を前に移動(上書きして詰める) 続いて1~9(1つ数字が減ったので)の乱数で指定された箇所の・・・ を実行します。 もっとよい案があると思いますが、それは他の方の回答に期待してください(自爆

ia080024
質問者

お礼

助言ありがとうございました。

関連するQ&A

  • 簡単なマインスイーパーをJavaで作りたいです。

    Javaの勉強をしたいと思い下のソースのマインスイーパーを ウィンドウ上で実行できるようにしたいです。 そのときに他のソースから呼び出す形にしたいです。 どのようにしたら良いでしょうか?教えてください。 出来ればソースがあるとありがたいです。 import java.util.Scanner; public class MineSweeper extends MinePrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); MineSweeper game = new MineSweeper(); game.displayStrblock(); while (!game.dead) { System.out.println("\n:爆弾数・・・" + game.mines); System.out.println("\n:場所を選んでください"); System.out.println("縦の場所の数字を入力"); int tate = Integer.parseInt(sc.next()); System.out.println("横の場所の数字を入力"); int yoko = Integer.parseInt(sc.next()); game.mineClick(tate, yoko); game.displayStrblock(); } } } class MinePrinter { String[][] strblock = new String[5][5]; int[][] blocks = new int[5][5]; int mines = 0; boolean dead = false; public MinePrinter() { mineSet(); } void mineClick(int i, int j) { if (aroundManyMines(i, j) == 99) { System.out.println("burst!!!"); System.out.println("You Dead!!\n"); strblock[i][j] = "*"; dead = true; } else { strblock[i][j] = Integer.toString(aroundManyMines(i, j)); } } void mineSet() { for (int i = 0; i < blocks.length; i++) { for (int j = 0; j < blocks[i].length; j++) { if (Math.random() < 0.2) { blocks[i][j] = 99; mines += 1; } else { blocks[i][j] = 0; } } } for (int i = 0; i < strblock.length; i++) { for (int j = 0; j < strblock.length; j++) { strblock[i][j] = "#"; } } } void displayStrblock() { for (int i = 0; i < strblock.length; i++) { for (int j = 0; j < strblock.length; j++) { System.out.print(strblock[i][j] + " "); } System.out.println(":" + i); } } int aroundManyMines(int i, int j) { if (blocks[i][j] == 99) { return 99; } int ans = 0; for (int r = -1; r <= 1; r++) for (int c = -1; c <= 1; c++) { try { if (blocks[i + r][j + c] == 99) { ans += 1; } } catch (ArrayIndexOutOfBoundsException e) { continue; } } return ans; } }

    • ベストアンサー
    • Java
  • 連立方程式を解くプログラムの後退代入の所

    連立方程式を解くプログラムで前進消去の部分はできたのですが、後退代入の所がうまくいきません。教えて!gooを通して皆さまの力をお借りできればと思います。よろしくお願いいたします。 import java.io.*; import java.util.*; import java.math.*; //連立方程式を解くプログラム class krm3{ public static void main(String args[]){ System.out.println("連立方程式を求めます。"); //declaring and allocating2> double[][] A = null; try{ BufferedReader br = new BufferedReader (new FileReader("renritu.txt")); String s; String[] vals; int rows = 0,cols = 0; while((s = br.readLine()) !=null){ vals = s.split(" ");//split the line with space cols = Math.max(cols,vals.length); rows++; } System.out.println(rows+"×"+cols+" array found"); A = new double[rows][cols]; br.close(); br = new BufferedReader(new FileReader("renritu.txt")); rows = cols = 0; while((s = br.readLine()) !=null){ vals =s.split(" ");//split the line with space cols = vals.length; for(int i=0; i<cols;i++) A[rows][i]=Double.parseDouble(vals[i]); rows++; } }catch (IOException e){ System.out.println(e); } for(int i = 0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ System.out.print(A[i][j]+" "); } System.out.println(); } System.out.println(); //掃き出し法 //前進消去 //行i=0~n-2に対してi+1行目以降のi列目を消去する(ただしnは行の数) // //i行目をピポッド(i,i)で正規化(割る) // 1行目に(j,i)要素をかけてj行目から引く for(int i = 0;i<A.length-1;i++){ double P = A[i][i];//pivot for(int j=0;j<A[i].length;j++) A[i][j]/= P; for(int k=i+1;k<A.length;k++){ double v = A[k][i]; for(int j=0;j<A[i].length;j++){ A[k][j]-= A[i][j]*v; } } } for(int i = 0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ System.out.print(A[i][j]+" "); } System.out.println(); } System.out.println(); // eqs= // 1 2 3 4 // 0 1 7 8 // 0 0 1 2 //後退代入 //行i=n-1~1に対してi-1行目以前のi列目を消去する for(int i = A.length;2<i;i--){ double P2 = A[i-1][i-1] ;//pivot for(int j=A[i-1].length;j>2;j--) A[i-1][j-1]/= P2; for( int k=i-1;k>2;k--){ double v2 = A[k-1][i-1]; for(int j=A[i].length;j>2;j--){ A[k][j]-= A[i][j]*v2; } } } for(int i = 0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ System.out.print(A[i][j]+" "); } System.out.println(); } System.out.println(); } }

  • 九九の表

    を作るプログラムなんですが結果がずれて表示されるんですがどうせればきれいにそろうんでしょうか?? いくらやっても上手くいきません・・・。 どなたかヒントもらえませんか。 \tを試して一応そろったんですがもっとコンパクトな表示結果にしたいんです。 プログラムはこんな感じです。 public class Kukuhyou3 { public static void main(String[ ] args) { int i,j,kekka; System.out.println(" | 1 2 3 4 5 6 7 8 9"); System.out.println("--+----------------------------"); for(i = 1;i < 10;i++) { System.out.print( " "+ i +"|"); for(j=1; j < 10; j++) { kekka=i * j; System.out.print(" "+kekka); } System.out.println(""); } } }

    • ベストアンサー
    • 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の二次元配列について質問です

    配列上にあるただ一つの1を入力に応じて移動させるプログラムを作っています。 たとえば0が入力されたら 0, 0, 0 0, 1, 0 0, 1, 0 → 0, 0, 0 0, 0, 0 0, 0, 0 という風に移動させ、端に行ったら移動できないようにしたいです。 今書いたプログラムだと、最初にある1が残ったままになってしまいます。 int[] p = {-1, -1}; int[][] im = new int[3][3]; Scanner scn = new Scanner(System.in); for (int i = 0; i < p.length; i++) { p[i] = 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); } int n = 0; n = scn.nextInt(); if (n == 0) { p[0] -= 1; } else if (n == 1) { p[1] += 1; } else if (n == 2) { p[0] += 1; } else if (n == 3) { p[1] -= 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); }

  • GUI~ボタン処理~

    このプログラムはファイル操作を使ったプログラムです。 import java.io.*; class k203 { public static void main(String args[]) throws IOException { int num,max,test[][]; double sum[]; String name[]; String Subj[] = {"国語","数学","社会","理科","英語"}; num = Read.readInt("人数"); test = new int[num][Subj.length]; sum = new double[Subj.length]; name = new String[num]; for(int i=0; i<num; i++) { System.out.print( (i+1)+"人目の名前:"); name[i] = Read.readString(); } System.out.print("\n"); for(int i=0; i<num; i++) { System.out.println(name[i]+"さんの点数"); for(int j=0; j<Subj.length; j++) { test[i][j] = Read.readInt(Subj[j]); sum[j] += test[i][j]; } } System.out.print("\n"); for(int j=0; j<Subj.length; j++) { max = 0; for(int i=0; i<num; i++) { if(test[i][j]>test[max][j]) { max = i; } } System.out.println(Subj[j]); System.out.println("最高点:"+test[max][j]+" "+name[max]+"さん"); System.out.println("平均点:"+sum[j]/num); System.out.print("\n"); } } } このプログラムをGUIをつかってボタンをクリックすると実行できるように したいのですがどんな感じにすればよいか教えてください!

    • ベストアンサー
    • Java
  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • javaの配列部分ででエラーがでます。

    javaの配列部分ででエラーがでます。 マインスイーパを作っており爆弾の位置を決めるところでエラーの原因がわからず困っています。 9×9で、 ランダムでかぶらないように10個の爆弾を置くプログラムを作りたいです。 Random rnd=new Random(); int[][] mine=new int[8][8]; for(int i=0;i<=9;i++){ int yoko=(rnd.nextInt()>>>1)%9; int tate=(rnd.nextInt()>>>1)%9; if(mine[yoko][tate]!=10)mine[yoko][tate]=10; //爆弾があるところは10 else i--; } よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列のインデックス番号を返したいが

    インデックス番号を返したい x[0]=1 x[1]=2 x[2]=3 x[3]=3 x[4]=5 の場合で探す(返す)値を3とした場合⇒2,3と値が返るようにしたい import java.util.*; class Test7_23 { static int[] arraySrchIdx(int[] a,int x){ int idx = 0; for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; } else{ a[i] = 0; } } for(int i=0;i<a.length;i++) //B System.out.println(a[i]); int[] b = new int[idx]; for(int i=0;i<a.length;i++){ if(a[i] != 0) for(int j=0;j<idx;j++) b[j]=a[i]; } for(int i=0;i<idx;i++) System.out.println("b["+i+"]="+b[i]); return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("配列の要素数は:"); int n = std.nextInt(); int[] x = new int[n]; for(int i=0;i<n;i++){ System.out.print("x["+i+"]="); x[i] = std.nextInt(); } System.out.print("探す値:"); int a = std.nextInt(); int[] b = arraySrchIdx(x,a); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } }

  • プログラムの平均値の出し方。

    プログラムの平均値の出し方。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } } このプログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。