• 締切済み

JAVAのプログラムについて・・・

次のプログラムで分からないところがあります。 教えてください。 [プログラムの説明] ・キーボードから入力した整数の約数(1と自分自身を除く)と約数の個数を求めて画面に表示する。 ・mainメソッドで、最大100個の約数を格納する配列divを用意する。整数をinNumに入力し、クラスDivisorのメソッドfindDivisorにdivとinNumを引き渡す。 ・メソッドfindDivisorでは、引き渡された整数のすべての約数(1と自分自身を除く)を求め、配列divに格納する。約数の数は、最大100個と仮定する。戻り値として、約数の個数を返す。 ・mainメソッドで、findDivisorの戻り値である約数の個数と、格納されたすべての約数を画面に表示する。 [プログラム] import java.io.*; class Divisor{ int findDivisor(int x, int div[])} //約数を配列に格納し、約数の個数を返す    int i, n = 0; for(i =2; < x+ i++) // (1)      if(x (2) i == 0){ div[(3)] =i; n++; } } } class RepEx4{ pablic static void main(String[] args) throws IOException{ int inMum, count, i; int [] div = neww int [100]; String s; Divisor check; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //入力の準備 System.out.print("input int:"); s = br.readLine(); //文字列の入力   inNum = Integer.parseInt(s); //文字列を数値に変換 check = new (4)();   count = check.findDivisor(inNum, div); if (count == (5))System.out.printLn("Divisor is not found); else { System.out.printLn("Number of divisor is " + count); System.out.print("divisor = "); for(i = 0; i (6)count; i++) System.out.print(div[i]+ ""); } } } ・プログラムあってますか? だぶん(2)~(6)は語句が足りてないと思うのですが、何が入るのでしょうか? また(1)のクラスDivisorのメソッドfindDivisor中のfor文 for(i = 2; i < x; i++) を例えば for(i =1; i <= x; i++) に置き換えると、プログラムはどうなっちゃいますか? ・キーボード入力を24としたときの実行結果(出力画面)が下記のようになったのですが、足りない語句はなんですか? [実行結果] input int :24 Number of dibisor is ?????? divisor = ?????? 初心者なのでつまずいてます、どうかよろしくお願いします。        

noname#45629
noname#45629

みんなの回答

noname#119918
noname#119918
回答No.2

コーディングの一例です。 綴間違いと思われる箇所が数箇所ありましたので、修正してあります。 質問をする際は、よく確認してから質問しましょう。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class Divisor{ int findDivisor(int x, int div[]) //約数を配列に格納し、約数の個数を返す { int i, n = 0; /* ある数xについて、最小の約数は2以上、最大の約数はx/2以下です。 よって、割る数iの範囲は2 <= i <= x/2 で十分です。 */ for(i =2; i <= x/2 ; i++) { if(x % i == 0) { div[n] =i; // 約数を配列に格納 n++; // カウントをインクリメント } } return n; // 約数の個数を返す } } class RepEx4{ public static void main(String[] args) throws IOException{ int inNum, count, i; int [] div = new int [100]; String s; Divisor check; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //入力の準備 System.out.print("input int:"); s = br.readLine(); //文字列の入力 inNum = Integer.parseInt(s); //文字列を数値に変換 check = new Divisor(); // インスタンスの生成 count = check.findDivisor(inNum, div); if (count == 0)System.out.println("Divisor is not found"); // 約数が無い場合なので、countはゼロ else { System.out.println("Number of divisor is " + count); System.out.print("divisor = "); for(i = 0 ; i < count ; i++) // 約数の個数と同じ回数、ループを回す { System.out.print(div[i]+ " "); } System.out.println(); } } }

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

補足要求です。 あなたの過去の質問に対して回答を寄せた方たちと同じなのですが, 不十分ながらも初心者のあなたが分かっている部分を書いていただけませんか。 http://okwave.jp/qa2870040.html http://okwave.jp/qa2741133.html http://okwave.jp/qa3299105.html

関連するQ&A

  • あるプログラムの結果がうまく表示されません

    以下のプログラムを書いたのですが、結果が正確に表示されません。 どこが間違っているのでしょうか? プログラムの内容は10個の整数を入力し、更に入力した数字で割れる個数を表示するものです。 #include <stdio.h> void input_i(int *in, int num); int div_enable(int *in, int num, int divisor); int main(void) { int array[10]; int i, s_num; input_i(array, 10); scanf("%d", &s_num); i = div_enable(array, 10, s_num); printf("%d\n", i); return 0; } void input_i(int *in, int num) { int i; for(i=0; i<num; i++){ scanf("%d", in+1); } } int div_enable(int *in, int num, int divisor) { int cnt, i; cnt = 0; for(i=0; i<num; i++) { if(in[i]%divisor == 0){ cnt++; } } return cnt; }

  • javaのプログラムに関する質問

    * 入力された数値の数だけ、"*"を表示するメソッド * displayAsterメソッドを作成して下さい。 */ public class MethodAdd3 { public static void main(String[] args){ // 入力された数字をint型の数値に変換 int iInput = Integer.parseInt(args[0]); // displayAsterメソッドの呼び出し displayAster(iInput); } // ここにdisplayAsterメソッドを作成 public static void displayAster(int iInput1){ for(i=0; i<iInput1; i++){ System.out.print("*"); } System.out.println(""); } ここまで出来たのですが、コンパイルエラーになってしまいます。 考え方かヒントなど、知恵をお貸しください。

  • javaで配列の格納をしたいです。

    配列の格納がうまくいきません。 javaについて質問させて頂きます。 ユーザーが数字を入力し配列 atr[ i ]に格納され 配列 v[ i ] に v[ 0 ] = count ... v[ 143 ] = count ... v[ 144 ] = count - 1 ... v[ 287 ] = count - 1 ... ... v[ count-288 ] = 2 ... v[ count-145 ] = 2 ... v[ count-144 ] = 1 ... v[ count-1 ] = 1 と、格納されるようなプログラムを作っています。 for文で作ろうと考えたのですが count, count-1 , ... 3, 2, 1と値を入れようと思いましたがうまくコンパイルが通りませんでした。 エラーは以下になります。 a.java:48: シンボルを見つけられません。 シンボル: メソッド readLine(int) 場所 : java.io.BufferedReader の クラス value = br_v.readLine(atr[i]); もし宜しければアドバイスやご指摘を頂けませんでしょうか。 説明も拙い部分がありますが宜しければお願いします。 import java.io.*; import java.util.Arrays; class a { public static void main(String[] args) throws IOException { int atr[]; atr = new int[25]; int count = 0; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ //絶対に通る String str = br.readLine(); int res = Integer.parseInt(str); if(res == 0){ break; } else{ atr[count] = res; } count++; } for(int i=0; i<count; i++){ System.out.println(atr[i] + "が、選択されました。"); } int v[] = new int[25*144]; String value; try{ BufferedReader br_v = new BufferedReader(new InputStreamReader(System.in)); for(int i=count; i<count; i--){ value = br_v.readLine(atr[i]); v[i] = Integer.parseInt(value); } } catch(IOException e){ System.out.println("エラーです。"); } } }

  • Javaのプログラムの質問です。

    Javaのプログラムについての質問です。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。  注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中に番号を振ってあります。 import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.List; class LocalList implements List{  private int Count;  private String Data[];  private Iterator ite;  private ListIterator lite;  // コンストラクタ  void mylist(){   Data = new String[10];   Count = 0;  }  (1)  public boolean add(Object str){   if(Count >= 10){    return false;   }   Data[Count ++] = new String((String)str);   return true;  }  public void add(int i,Object str){  }        public boolean addAll(Collection c){   return false;  }        public boolean addAll(int i,Collection c){   return false;  }    (2)  public void clear(){   Count = 0;  }  public boolean contains(Object str){   return false;  }          public boolean containsAll(Collection c){   return false;  }  public boolean equals(Object str){   return false;  }    (3)  public Object get(int i){   return (i >= Count);  }  public int hashCode(){   return -1;  }  public int indexOf(Object str){   return -1;  }  public boolean isEmpty(){   return false;  }  public Iterator iterator(){   return ite;  }     public int lastIndexOf(Object str){   return -1;  }     public ListIterator listIterator(){   return lite;  }     public ListIterator listIterator(int i){   return lite;  }    (4)  public Object remove(int i){   return (i >= Count);  }    public boolean remove(Object str){   return true;  }         public boolean removeAll(Collection c){   return false;  }         public boolean retainAll(Collection c){   return false;  }    (5)  public Object set(int i,Object str){   return Data[i];  }    (6)  public int size(){   return Count;  }  public List subList(int i,int j){   return this;  }  public Object[] toArray(){   return Data;  }  public Object[] toArray(Object[] a){   return Data;  } } class Main {  public static void main(String[] args) {   mylist sub = new mylist();   sub.add("ビルドバーニングガンダム");   sub.add("ライトニングガンダム");   sub.add("ウイニングガンダム");   sub.add("ガンダムフェニーチェリナーシタ");   sub.add("R・ギャギャ");   for(int i = 0; i < sub.size(); i++){      System.out.println(sub.get(i));   }   // 改行   System.out.println();   // setメソッド   sub.set(1,"ガンダムエピオン");   for(int i = 0; i < sub.size(); i++){    System.out.println(sub.get(i));   }   // 改行   System.out.println();   // sizeメソッド   System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n");   // removeメソッド   sub.remove(1);   for(int i = 0; i < sub.size(); i++){       System.out.println(sub.get(i));   }   // clearメソッド   sub.clear();   System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです");    } } setメソッドとremoveメソッド以外は起動するのようになったのですが、この2つがうんともすんとも動きません。ジェネリクス型を使うという考え方もあるらしいのですが、ネットで調べてもピンと来ず寸詰まり状態になってしまっています。後少しだと思うのですが。。。。 どなたかご教授頂けないでしょうか?よろしくお願い致します。

  • javaプログラミングについて

    ただいまjavaプログラム勉強中でhit&blowを制作しております。 public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random rand = new Random(); int[] answer = new int[4]; int[] input = new int[4]; int[] Number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; int x = 10; for (int i = 0; i < 4; i++) { int select = (int) (Math.random() * x); answer[i] = Number[select]; Number[select] = Number[x - 1]; x--; } int count = 1; while (true) { System.out.println("4桁の異なる数値を入力"); int str_input = scan.nextInt(); // 代入 for (int i = 0; i < 4; i++) { input[i] = str_input; } // hit int hit = 0; for (int i = 0; i < 4; i++) { if (input[i] == answer[i]) { hit++; } } // blow int blow = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++){ if (i != j && input[i] == answer[j]) { blow++; } } } if (hit == 4) { System.out.println("4hit"); System.out.println("正解まで " + count + "回"); break; } else { System.out.println("Hit:" + hit + " Blow:" + (blow - hit)); count++; } } } } 数字が4桁で作っているのですが、数字や4桁以上を入力してしまった場合の表示は後にしようとして、先にhitとblowの判定を作ろうとしているのですが、上記で実行したところhitとblowの判定がされずhit:0blow:0と表示されてしまいます。解決策を教えてください。 自分で作ってみたものの、hit blowの判定方法があっているかも自信がないです。

    • ベストアンサー
    • Java
  • Javaのプログラムをルビー言語に。

    10~50までの素数が格納されている配列を rubyで作りたいのですが、どのようにすればいいいのかよくわかりません。 下のプログラムにも間違いがあるかもしれませんので もしありましたご指摘お願い致します。 for i=start i<=end i++; //iは割られる数 for(j=1;j<=i;j++){ //jは割る数 if(i%j==0){ count++; } } if(count==2){ System.out.println(i); } iをjで割っていき、余りが0になったらカウントを増やしていくプログラムです。 素数は1とその数字でしか割れないので、カウントは2になり、 それを配列に格納したいのですが、ここではただ表示するだけに留まってしまっています。 どなたかよろしくお願い致します。

  • Javaのプログラムをルビー言語に。

    10~50までの素数が格納されている配列を rubyで作りたいのですが、どのようにすればいいいのかよくわかりません。 下のプログラムにも間違いがあるかもしれませんので もしありましたご指摘お願い致します。 for i=start i<=end i++;//iは割られる数 for(j=1;j<=i;j++){//jは割る数 if(i%j==0){ count++; } } if(count==2){ System.out.println(i); } iをjで割っていき、余りが0になったらカウントを増やしていくプログラムです。 素数は1とその数字でしか割れないので、カウントは2になり、 それを配列に格納したいのですが、ここではただ表示するだけに留まってしまっています。 まだruby初心者で分からないことだらけですので、 簡単な方法ではなく、出来ればfor文を使用したやり方で教えていただけると 幸いです。 よろしくお願い致します。

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

    * クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 *       ・ *       ・ *       ・ *       ・ *       ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; //メソッドの呼び出し int max=saikou(score); //最高得点メソッドへ System.out.println(max); int min=saitei(score); //最低得点メソッドへ System.out.println(min); } //ここにメソッドを追加してください public static int saikou(int[] score){ //最高得点者メソッド int max=score[0]; for(int i=1; i<score.length; i++){ if(score[i]>max) max=score[i]; } return max;//値を返す } public static int saitei(int[] score){ //最低得点メソッド int min=score[0]; for(int i=1; i<score.length; i++){ if(score[i]<min) min=score[i]; } return min;//値を返す } } これで最高得点と最低得点は表示されるのですが、ここからどうやって最高得点者「綾乃」と最低得点者「愛花」を表示するのか分かりません。どなたか御教授お願い致します。

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

    数独の解答を一発で出すプログラムを考えています。 自分が考えたプログラムは下記の通りです。 import java.util.Random; public class NumberPlace { public static void main(String[] args) { int i, j, k, l, check=0, count=0, tmp; int a[][] = new int [9][9]; Random rnd = new Random(); int ran; for ( i=0; i<9; i++ ) for ( j=0; j<9; j++) a[i][j] = 0; count = 0; for ( i=0; i<9; i++ ) { for ( j=0; j<9; j++) { ran = rnd.nextInt(9); tmp = ran + 1; check = 0; for ( k=0; k<j; k++ ) if ( a[i][k] == tmp ) check = 1; for ( k=0; k<i; k++ ) if ( a[k][j] == tmp ) check = 1; for ( k=(i/3)*3; k<(i/3)*3+3; k++ ) for ( l=(j/3)*3; l<(j/3)*3+3; l++ ) if ( a[k][l] == tmp ) check = 1; if ( check == 0 ) a[i][j] = tmp; if ( check == 1 ) j--; if ( count > 50000 ) break; count++; } count = 0; } for ( i=0; i<9; i++) { for ( j=0; j<9; j++ ) { if ( a[i][j] < 10 ) { System.out.print(" "); } System.out.print(a[i][j]); } System.out.print("\n"); } } } これを実行すると、正しい数独の解が出来るまでに実行を20~30回。多い時は200回前後実行しないと出来ません。 実行結果(0は数独のルール上数字が入らない所) 9 3 6 5 4 1 7 8 2 1 7 4 2 9 6 5 3 0 5 2 8 7 3 0 0 0 0 2 1 5 3 7 8 4 6 9 8 6 3 4 1 9 2 7 5 4 9 7 6 5 2 1 0 0 7 5 1 8 6 4 9 2 3 3 8 2 9 0 0 0 0 0 6 4 9 1 2 5 8 0 0 これを一発で0がない状態にしたいのです。 因みにC言語だと下記のプログラムで一発で出るのですが。(前回質問したプログラム) int main(void) { int i,j,k,l,chk=0,num=0,tmp,count=0; int a[9][9];  srand((unsigned) time(NULL)); start: count=0; for(i = 0; i < 9; i++) for(j = 0; j < 9; j++) a[i][j]=0; for(tmp=1;tmp<10;tmp++){ num=0; while(num<9){ i = rand() % 9; j = rand() % 9; chk=0; for(k=0;k<9;k++) if(a[i][k]==tmp)chk=1; for(k=0;k<9;k++) if(a[k][j]==tmp)chk=1; for(k=(i/3)*3;k<(i/3)*3+3;k++){ for(l=(j/3)*3;l<(j/3)*3+3;l++){ if(a[k][l]==tmp)chk=1; } } if((chk==0)&&(a[i][j]==0)){ a[i][j]=tmp; num++; } if(count%100==99){ count++; for(i = 0; i < 9; i++) for(j = 0; j < 9; j++) if(a[i][j]==tmp)a[i][j]=0; num=0; } if(count>10000) goto start; count++; } } for(i = 0; i < 9; i++){ for(j = 0; j < 9; j++){ printf("%d ",a[i][j]); } printf("\n"); } return 0; } このプログラムを実行すると一発で解答が出ます。 上のJavaプログラムを下のプログラムのようにするにはどうしたら良いでしょうか。

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

    */コマンドライン引数で2つの数字と1つの記号を受け取ります。 * //受け取った記号が『+』ならplusメソッドを呼び出し、 * //受け取った記号が『-』ならminusメソッドを呼び出し、 * //受け取った記号が『×』ならmultiplyメソッドを呼び出し、 * //受け取った記号が『÷』ならdivideメソッドを呼び出し、 * //それ以外が入力された場合は『計算できません。』と表示する * //プログラムを作成してください。 * */ public class MethodAdd9 { public static void main(String[] args) { int input1 = Integer.parseInt(args[0]); int input2 = Integer.parseInt(args[1]); String sign = args[2]; //ここにプログラムを追加してください if(sign.equals("+")){ plus(input1,input2);//プラスメソッドへ } if(sign.equals("-")){ minus(input1,input2);//マイナスメソッドへ } if(sign.equals("*")){ multiply(input1,input2);//掛算メソッドへ } if(sign.equals("/")){ divide(input1,input2);//割算メソッドへ } } // 四則演算を行うメソッドを追加 //プラスメソッド表示 public static void plus(int a,int b){ int c=a+b; System.out.println(a+b); } //マイナスメソッド表示 public static void minus(int d,int e){ int f=d-e; System.out.println(d-e); } //掛算メソッド表示 public static void multiply(int g, int h){ int i=g*h; System.out.println(g*h); } //割算メソッド表示 public static void divide(int j,int k){ int l=j/k; System.out.println(j/k); } } ここまで出来て、記号を認識してくれるようにはなったのですが、何故か"*"掛算の記号だけ読み込んでくれません。また、ここから「計算出来ません」と表示させるにはどうすれば良いでしょうか。知恵をお貸しください。