プログラムの処理について

このQ&Aのポイント
  • 主クラスから別のクラスに送るときに値一個ずつ6回送って処理した値を返すのと値二個ずつ3回送って処理した値を返すのとどちらが早いのですか?
  • 例1) main関数からnum1の要素を一つずつ取り出し、処理してansに足していく方法と例2) main関数からnum1とnum2の要素をペアで取り出し、処理してansに足していく方法の、どちらが処理速度が早いかを知りたいです。
  • 例1)は値を一つずつ送って処理し、例2)は値をペアで送って処理する方法です。どちらの方法が効率的なのか教えてください。
回答を見る
  • ベストアンサー

プログラムの処理について

主クラスから別のクラスに送るときに 値一個ずつ6回送って処理した値を返すのと 値二個ずつ3回送って処理した値を返すのと どちらが早いのですか? 例1) main(){ int i,ans = 0; int num1[] = new int[6]; for(i=0;i<6;i++){ num1[i] = i+1; ans += ***.keisan(num[i]); } } class ***{ static int keisan(int num){ int x; x = num * 2; return x; } } 例2) main(){ int i,j,ans = 0; ***[] dt = new ***[3]; for(i=0,j=1;i<3;i++){ *** dt[i] = new ***(); dt[i].num1 = dt[i].num2 = 0; dt[i].num1 = j++; dt[i].num2 = j++; ans += ***.keisan(dt[i].num1,dt[i].num2); } } class ***{ public int num1; public int num2; static int keisan(int num1,int num2){ int x; x = (num1 + num2) * 2; return x; } } 上記の構文みたいな感じの状況です 構文が間違ってても気にしないでいただけるとありがたいです

  • ilice
  • お礼率27% (13/48)
  • Java
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

質問の意図するところがわかりません。 JVMの最適化の話でしょうか? そもそも、ご質問の内容だと、結果が違うものが返るので、比較してよいものかどうか。。 構文がおかしいとか、ロジックがおかしい というのを考えなければ、 計算内容が簡単なものなら、受け渡しループ回数が少ない方が速いと思います。 でも、計算が複雑なものだったら、内部で計算を行うために結局複数回のメソッドを呼ばなくてはいけないので、ほとんど変わらないでしょうね。 こんな単純な疑問なら、人に聞くより、やってみるのが一番よいと思いますよ。

その他の回答 (1)

回答No.1

ご自身で試してみてはいかがですか? ここで質問して回答を待つより早いと思いますよ。 試した結果が、ご自身で予想していた内容とかけ離れていて、 それはなぜ?という質問ならわかりますが…

ilice
質問者

補足

文字列・数値等で試したのですがあまり差がなく 複雑なプログラムを組むには知識や経験が足りないので ほかの人の知識をお借りしようと思って質問しました。 プログラミングするときに処理は早いほうがよいかと 思いまして・・・。

関連するQ&A

  • データの受け渡しについて

    mainの中で読み込んだデータを外部の画面出力に 送る方法がわかりません いろいろ試したのですがわかりませんでした どのように記述すればよいのか または参考になるサイトを教えてください 自分で組んだソースです↓ import java.awt.*; class date{ public String name; public int number; } class static main(String[] args){ Frame frm = new Frame; frm.setSize(new Dimensuon(300,400)); int i,ct; String line,str; date[] dt = new date[2]; for(i=0;i<2;i++){ dt[i] = new date(); dt[i].number = 0; } try{ BufferedReader br = new BufferedReader(new FileReader("フルパス")); for(i=0;i<2 && (line = br.readline)!=null;i++){ dt[i].name = line.subString(0,4); str = line.subString(5,6); dt[i].number = Integer.parseInt(str); } }catch(Exception e){ System.out.print("読み込み失敗\nエラー情報:" + e); } for(i=0;i<2;i++)frm.add(new disp(dt[i],ct)); ↑多分ココの構文がおかしいと思っています frm.setVisible(true); } class disp extends Canvas{ public void paint(date dt,int ct,Graphics g){ String num; int h,w,x; h = w = 100; x = 20; num = Integer.toString(dt.number); g.drawString(dt.name,h,w); g.drawString(num,h+x,w); } } 大体こんな感じの構文です paint以外のところで読み込んで paintで出力する形にしたのですが出来ませんでした あと、この構文だと出力したウィンドウの 右上にある「×」ボタン押してもウィンドウが消えませんでした 出来ましたら構文で間違っているところを 修正していただけたらと思っています

    • ベストアンサー
    • Java
  • C++でオセロのCPUの処理を考えたのですが、40手目あたりからうまく

    C++でオセロのCPUの処理を考えたのですが、40手目あたりからうまくいきません。ReverseOthello関数の石を探して裏返す処理がおかしいと思われます。一番裏返せる石が多い位置を裏返すという処理をしています。プログラミング経験が豊富な方よろしくお願いします。 #include "stdafx.h" bool Othello(int (*pBoard)[8] ){ int i; int j; int ans; int k = 0; int num[3] = {0,0,0}; int sum[28][3]; i = 0; while(i < 28){ j = 0; while(j < 3){ sum[i][j] = 0; j++; } i++; } i = 0; while(i < 8){ j= 0; while(j < 8){ if(pBoard[i][j] == 0){ ans = SeachStone(i,j,pBoard); if(ans != 0){ sum[k][0] = i; sum[k][1] = j; sum[k][2] = ans; k++; } } j++; } i++; } i = 0; while(i < 28){ if(num[2] < sum[i][2]){ num[0] = sum[i][0]; num[1] = sum[i][1]; num[2] = sum[i][2]; } i++; } if(num[2] == 0){ return false; } ReverseStone(num[0],num[1],pBoard); return true; } void ReverseStone(int y1,int x1,int (*pBoard)[8]){ int cnt = 0; int y2; int x2; int i; int j; int k; if(y1 == 0){ i = 0; } else { i = y1-1; } while(i < y1 + 2){ if(x1 == 0){ j = 0; } else { j = x1-1; } while(j < x1 + 2){ y2 = i; x2 = j; cnt = 0; while(pBoard[y2][x2] == -1){ y2 = y2 + (i - y1); x2 = x2 + (j - x1); cnt++; } if(pBoard[y2][x2] == 1&& cnt != 0){ k = 0; while(k < cnt + 1){ y2 = y2 + (y1 - i); x2 = x2 + (x1 - j); pBoard[y2][x2] = 1; printf("%d\n",pBoard[y2][x2]); k++; } } j++; } i++; } } int SeachStone(int y1,int x1,int (*pBoard)[8]){ int cnt = 0; int sumCnt = 0; int y2; int x2; int i; int j; if(y1 == 0){ i = 0; } else { i = y1-1; } while(i < y1 + 2){ if(x1 == 0){ j = 0; } else { j = x1-1; } while(j < x1 + 2){ y2 = i; x2 = j; cnt = 0; while(pBoard[y2][x2] == -1){ y2 = y2 + (i - y1); x2 = x2 + (j - x1); cnt++; } if(pBoard[y2][x2] == 1&& cnt != 0){ sumCnt = sumCnt + cnt; } j++; } i++; } return sumCnt; }

  • プログラムの合体。

    jump7799_4836さん 2018/7/2103:34:44 public class Test2 { public static int メソッド () { System.out.println("メソッド()が呼ばれました"); return 0; } public static int メソッド (int i) { System.out.println("メソッド(int i)が呼ばれました"); return i; } public static int メソッド (int i, int j) { System.out.println("メソッド(int i, int j)が呼ばれました"); return i; } public static int メソッド (short s) { System.out.println("メソッド(short s)が呼ばれました"); return s; } public static int メソッド (double d) { System.out.println("メソッド(double d)が呼ばれました"); return (int) d; } } public メソッド class Test2 { public メソッド static void main(String[] args) { Test2.メソッド (); Test2.メソッド (1); Test2.メソッド (1,2); Test2.メソッド (1.1); Test2.メソッド ((short) 1); Test2.メソッド ((double)1); } } kouzou@GD348ZZD9:/WORK$ javac Test2.java Test2.java:29: エラー: class、interfaceまたはenumがありません public メソッド class Test2 { ^ Test2.java:30: エラー: <identifier>がありません public メソッド static void main(String[] args) { ^ エラー2個 2つのプログラムが合体することってあるのですか? いつもすみません。 解説のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • javaプログラム 合ってるかお願いします

    プログラムは非常に苦手なため合ってないと思いますが、合ってないのは何が正解かを教えてください。 よろしくお願いします 1 ローカル変数を全て答えよ args,num 2 インスタンス変数を全て答えよ num 3 インスタンスメソッド名を答えよ Example2 4インスタンスメソッドを呼び出している行 public class Example2{ int num; public static viod main(String[] args){ Example2 ex2 = new Example2(5); int a = ex2.getNum(); System.out.println(a); } Example2(int num){ this.num=num; } int getNum(){ return this.num; } }

    • ベストアンサー
    • Java
  • 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 iを1づつ増やすプログラムと2づつ増やすプログラム

    次のようにすればiを1づつ増やして表示されます。 class Calc{   int i=1;   int add(){     return i++;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 1 i = 2 i = 3 しかし次のように2づつ増やそうとすると、 class Calc{   int i=1;   int add(){     return i+2;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 3 i = 3 i = 3 このようになってしまいます。どこがおかしいのでしょうか?

    • ベストアンサー
    • Java
  • {x = x>y ? x:y; return x;}

    #include <iostream> using namespace std; inline int max(int x, int y){x = x>y ? x:y; return x;} int main() { int num1, num2, ans; cout << "2つの整数を入力して。\n"; cin >> num1 >> num2; ans = max(num1, num2); cout << "最大値は" << ans << "です。\n"; return 0; } の{x = x>y ? x:y; return x;}の部分の意味が解りません。

  • JAVAのプログラム 何が悪いか教えてください。(初心者です。)

    public class Hairetsu7 { public static void main(String[] args) { int[][][] b = new int[10][5][3]; int x = 1 ; for(int i = 1; i<= 10 ; i++){ for(int ii = 1; ii<= 5 ; ii++){ for(int iii= 1; iii<= 3 ; iii++){ b[i][ii][iii] = x; System.out.println("b["+i+"]["+ii+"]["+iii+"]の値は"+b[i][ii][iii]+"です。"); x = x + 1;} } } } } 配列の勉強中ですが、ここで詰まってしまい先に進みません。実行すると"[1][1][2]の値は2です"で止まってしまいます。どうしてですか?"[10][5][3]の値は150です"まで表示させたいのですができません。どうすればいいでしょうか? 教えてください。お願いします。    追伸 8行目を次のようにかえると一応できますが、これだと配列に値が入っていないと言われました。System.out.println("b["+i+"]["+ii+"]["+iii+"]の値は"+x+"です。"); x = x + 1; この方法以外でお願いします。  

    • ベストアンサー
    • Java
  • java while文です。教えてください(__)

    public class mondai2{ //プログラム開始 public static void main(String args[]){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int i; int ans=0; int seikai=0; for(i=0;i<5;i++){ try{ { Random ran = new Random(); int num1 = ran.nextInt(8)+1; int num2 = ran.nextInt(8)+1; ans = num1*num2; System.out.print("問題"+(i+1)+":"); System.out.print(num1 + "×" +num2 + "="); String s =in.readLine(); seikai = Integer.parseInt(s); if(seikai==ans){ System.out.println("正解"); }else{ System.out.println("不正解"); } } }catch(IOException e){ System.out.println("エラー"); } } } } このプログラムをwhile文か、do while文にして正解が出るまで問題が出続けるようにしたいんですけど、まったくわからなくて困っています>< 教えてください(+o+)

    • ベストアンサー
    • Java
  • for文の実行結果について

    public class Trace2 { public static void main (String[] args) { int i; int num; num = 1; for (i = 0; i < 10; i++) { num += num; } System.out.println("iの値は" + i); System.out.println("numの値は" + num); } } 実行結果は iの値は10 numの値は1024になります。 何故こうなるのですか?

    • ベストアンサー
    • Java

専門家に質問してみよう