prophetok の回答履歴

全92件中41~60件表示
  • BufferedInputStream.readの終了判定は?

    JAVA初心者ですので、不慣れな点があるかと思いますが宜しくお願い致します。 クライアントからサーバーへ画像データをバイナリーで転送しています。 サーバー側ではクライアントから送信されたデータをすべて読み終えているだろうと思うのですが、ループ処理を抜けず、プログラムが待機中?になってしまい次の処理へ進まず困っています。 具体的には以下の箇所です。 <サーバー側> inStream = new BufferedInputStream(socket.getInputStream()); while ( (len = inStream.read(byteTmp,0,len)) > 0 ) {※ここで停止してしまう。 cnt += len; System.out.println("image reading now..."+cnt); receivedBuffer.write(byteTmp,0,len); } デバッグメッセージではファイルの取得サイズ(cnt)を出していますが、送信側のファイルサイズと一致しているため、すべて受信されていると判断しています。 すべて受信した場合、-1が返るという認識ですが、実際-1は返ってこずに、そこのステップで停止します。(次の受信データを待機しているような状態です) <クライアント側> outStream = new BufferedOutputStream(socket.getOutputStream()); public void SendByteImage(byte[] byteImage) { try { outStream.write(byteImage,0,byteImage.length); outStream.flush(); } catch (IOException e) { e.printStackTrace(); } } 引数など変えたりしてみたのですが、どうしても受信データをすべて読み終えたことを認識してくれません。。。 宜しくお願い致します。

    • ベストアンサー
    • mikanuri
    • Java
    • 回答数2
  • 文字入れ替え

    #include "stdafx.h" #include <ctype.h> #include <string.h> #include <stdlib.h> typedef struct { char number[6]; char class_type[20]; char name[8]; char subject[5]; } my; my data[100]; int main(int argc, char* argv[]) { FILE *fp; int field = 0, line = 0; char buf[1000], *str; char bufG[1111]; int i; if((fp=fopen("test3.csv","r"))==NULL){ printf("ファイルが開けません"); } while(fgets(buf,1000,fp) !=NULL){ str=buf; while(*str != '\0'){ if(*str != ','){ for(i = 0; *str != ',' && *str != '\0' ; i++){ if(*str == '\n'){ } else{ bufG[i] = *str; } str++; } bufG[i] = '\0'; switch(field){ case 0: strcpy(data[line].number, bufG); break; case 1: strcpy(data[line].class_type, bufG); break; case 2: strcpy(data[line].name, bufG); break; case 3: strcpy(data[line].subject, bufG); break; } field++; } else{ str++; } } line++; field = 0; } int p, q; for(p = 0; p < line; p++){ for(q = 0; q < line; q++){ if(strcmp(data[p].class_type, data[q].class_type) == 0 && strcmp(data[p].subject, data[q].subject) == 0 && p != q ){ printf("p=%d q=%d\n", p, q); } } } fclose(fp); return 0; } こちらのプログラムは 1,A,山根,音楽//番号、クラス、名前、好きな教科 2,B,本田,美術 3,B,松本,美術 4,A,横野,音楽 というファイルの内容を読み込んでクラスと好きな教科が同じものを 1,A,山根、音楽 4,A,横野、音楽 2,B,本田、美術 3,B,松本、美術のようにソートするプログラムの続きですが ソート方法についてです。 if(strcmp(data[p].class_type, data[q].class_type) == 0 && strcmp(data[p].subject, data[q].subject) == 0 && p != q ){ swap(data[p+1].number, data[q].number; swap(data[p+1].class_type, data[q].class.type); swap(data[p+1].name,data[q].name); swap(data[p+1].subject,data[q].subject); } void swap(char *p, char *q) { char *temp; temp = p; p = q; q= temp; } のように追加してみましたが入れ替えができていません。 どこがまずいのでしょうか?又他にも良い方法があれば教えて下さい。

  • C言語の「->」の意味

    C言語のソースを見ていて「->」という演算子が出てくるのですが、意味が分かりません。どんな意味なんでしょうか?

  • 線形補間 プログラム

    線形補間のプログラムが分かりません。 ちなみに関数をしようして作れといわれてすごく悩んでいます。 どなたか教えてください。 ちなみに値は a[0]=0.0;b[0]=0.0; a[1]=5.0;b[1]=0.087; a[2]=10.0;b[2]=0.173; a[3]=15.0;b[3]=0.258; a[4]=20.0;b[4]=0.342; a[5]=25.0;b[5]=0.422; になっています。 教えてください

  • 演算子の優先順位

    演算子の優先順位が良くわかりませんが次の例題はどう考えればよいでしょう? (例)a = 5,b = 2 としたときの,w の値が1 となる演算式は? ア w = ++a / ++b; イ w = ++a / b++; ウ w = a++ / ++b; エ w = a++ / b++;

  • 世界のナベアツ

    今C言語のプログラミングを勉強しています。 3の付く数字と3の倍数をアホにさせたいのですが、うまくできません。 3の倍数は%3で余りが0になるようにするのは分かるのですが、3の付く数字(135とか)をどのようにプログラムしたら良いのか分かりません。 ぜひ教えてください。

  • 世界のナベアツ

    今C言語のプログラミングを勉強しています。 3の付く数字と3の倍数をアホにさせたいのですが、うまくできません。 3の倍数は%3で余りが0になるようにするのは分かるのですが、3の付く数字(135とか)をどのようにプログラムしたら良いのか分かりません。 ぜひ教えてください。

  • ハッシュについて教えて下さい

    現在出来るだけ高速に大量の英単語の登録(検索)を行いたいと考えています。 現在は受け付ける文字の種類を進数にして桁上げして、クローズドで(最初にがっぽり配列を用意してその中のどこかに入れる形式で)計算しています。 例えば0~9の文字のみ受け付ける仕様だとすると、文字の種類は10種類なので、「192」という文字列なら、 1*10^2 + 9*10^1 + 2*10^0 = 192番地に登録 といった感じです。今回大小アルファベットを含むので10→62で計算しています。 しかしこの方法では、62進数が膨大な数になるため、配列に上限があることから、完全なユニークな数値が生成出来ません。 ある程度ハッシュ値がぶつかってしまいます。 完全にユニークな数値は無理でしょうが、出来るだけ衝突は避けたいと考えています。 そこで、もっと効率よいハッシュ値を求めるMurMurHash 2.0というアルゴリズムを聞いたのですが、HPを見ても何が何だかよくわかりません; HPにてMurmurHash2.cppが公開されているので、もしご存知の方がいらっしゃればそのアルゴリズムを教えていただけないでしょうか。 http://www.google.co.jp/search?hl=ja&rlz=1C1GGLS_jaJP302JP303&q=MurMurHash+2.0&btnG また、高速な文字列登録(検索)を行う為の方法があれば教えて下さい。 よろしくお願いいたします。

  • ハッシュについて教えて下さい

    現在出来るだけ高速に大量の英単語の登録(検索)を行いたいと考えています。 現在は受け付ける文字の種類を進数にして桁上げして、クローズドで(最初にがっぽり配列を用意してその中のどこかに入れる形式で)計算しています。 例えば0~9の文字のみ受け付ける仕様だとすると、文字の種類は10種類なので、「192」という文字列なら、 1*10^2 + 9*10^1 + 2*10^0 = 192番地に登録 といった感じです。今回大小アルファベットを含むので10→62で計算しています。 しかしこの方法では、62進数が膨大な数になるため、配列に上限があることから、完全なユニークな数値が生成出来ません。 ある程度ハッシュ値がぶつかってしまいます。 完全にユニークな数値は無理でしょうが、出来るだけ衝突は避けたいと考えています。 そこで、もっと効率よいハッシュ値を求めるMurMurHash 2.0というアルゴリズムを聞いたのですが、HPを見ても何が何だかよくわかりません; HPにてMurmurHash2.cppが公開されているので、もしご存知の方がいらっしゃればそのアルゴリズムを教えていただけないでしょうか。 http://www.google.co.jp/search?hl=ja&rlz=1C1GGLS_jaJP302JP303&q=MurMurHash+2.0&btnG また、高速な文字列登録(検索)を行う為の方法があれば教えて下さい。 よろしくお願いいたします。

  • javaで九九の表を作りたい

    学校の課題でjavaで九九の表を作ってみたのですが、うまくいきません。 アドバイスいただけないでしょうか。 ・以下のような結果が欲しいと考えています。数字の間はタブで区切ります。 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 . . . . 4 8 . . . . . . . ・作ってみたコードです。 class Sample { public static void main(String args[]){ for(int i=1;i<=9;i++){ for(int j=1;j<=9;i++){ System.out.print(i*j+"/t"); } System.out.print("/n"); } } } ・実行した結果です。 1/t2/t3/t4/t5/t6/t7/t8/t9/t10/t11/t12/t13/t14/t15/t16/t17/t18/t19/t20/t21/t22/t23/t24/t25/t26/t27/t28/t29/t30/t31/t32/t33/t34/t35/t36/t37/... ・考えられる問題は、   ・"/t"がタブではなくて"/t"という文字列として認識されている。   ・i*jが掛け算として計算されていない   ・System.out.print("/n");は処理されていない こんなとことでしょうか。 宜しくお願いします。

    • ベストアンサー
    • kogukogu2
    • Java
    • 回答数2
  • ファイル

    ファイルを読み込み単語ごとに表示するプログラムです。 例 ファイル データ 形式 歴史・・ のように単語の後には空白がありますファイルです FILE *fp; char buf[1000]; char buf_word[1000]; char *str; char *bufstr; if((fp = fopen("test.txt","r")) == NULL){ printf("error!"); return 0; } while(fgets(buf,1000,fp) !=NULL){ str = buf; while(*str !='\0'){ strbuf = buf_word; if(*str ==' '){ printf("%s",buf_word); } else{ *strbuf++ = *str++; } } } とプログラムしてみましたが*strの値がどうもおかしく 最初が "フ" じゃなく"・"になってます。 最初の単語がG11とかなら"G"になっていますが・・ 教えて下さい。

  • ファイル

    ファイルを読み込み単語ごとに表示するプログラムです。 例 ファイル データ 形式 歴史・・ のように単語の後には空白がありますファイルです FILE *fp; char buf[1000]; char buf_word[1000]; char *str; char *bufstr; if((fp = fopen("test.txt","r")) == NULL){ printf("error!"); return 0; } while(fgets(buf,1000,fp) !=NULL){ str = buf; while(*str !='\0'){ strbuf = buf_word; if(*str ==' '){ printf("%s",buf_word); } else{ *strbuf++ = *str++; } } } とプログラムしてみましたが*strの値がどうもおかしく 最初が "フ" じゃなく"・"になってます。 最初の単語がG11とかなら"G"になっていますが・・ 教えて下さい。

  • ハッシュについて教えて下さい

    現在出来るだけ高速に大量の英単語の登録(検索)を行いたいと考えています。 現在は受け付ける文字の種類を進数にして桁上げして、クローズドで(最初にがっぽり配列を用意してその中のどこかに入れる形式で)計算しています。 例えば0~9の文字のみ受け付ける仕様だとすると、文字の種類は10種類なので、「192」という文字列なら、 1*10^2 + 9*10^1 + 2*10^0 = 192番地に登録 といった感じです。今回大小アルファベットを含むので10→62で計算しています。 しかしこの方法では、62進数が膨大な数になるため、配列に上限があることから、完全なユニークな数値が生成出来ません。 ある程度ハッシュ値がぶつかってしまいます。 完全にユニークな数値は無理でしょうが、出来るだけ衝突は避けたいと考えています。 そこで、もっと効率よいハッシュ値を求めるMurMurHash 2.0というアルゴリズムを聞いたのですが、HPを見ても何が何だかよくわかりません; HPにてMurmurHash2.cppが公開されているので、もしご存知の方がいらっしゃればそのアルゴリズムを教えていただけないでしょうか。 http://www.google.co.jp/search?hl=ja&rlz=1C1GGLS_jaJP302JP303&q=MurMurHash+2.0&btnG また、高速な文字列登録(検索)を行う為の方法があれば教えて下さい。 よろしくお願いいたします。

  • 小文字を大文字に変換する方法について

    Java初心者の者です。 パラメータに文字列を入力し 小文字の頭文字だけ大文字に変換させたものを繋げて出力させたいです。 例えば >>java Sample abc def g 15 hi AbcDefG15Hi のような感じです。 文字列を繋げるメソッドと 全てを大文字や小文字に変換させるメソッドは調べたらありましたが 頭文字のみを大文字に変換させるメソッドは自分では見つかりませんでした。 もしそのようなメソッド、もしくは方法がありましたら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • windy0508
    • Java
    • 回答数2
  • Fortran90に関する質問です。

    次の問題が分かりません。 「3次方程式x^3+x^2-5x-2の解で、-1と0の間にあるものを求めるプログラムを示せ。(二分法)。ただし、x^3+x^2-5x-2の値の絶対値が0.0001以下であれば、xが解であるとみなすこと。」 取り敢えず、次のように式を設定しました。これ以降、DO構文を使って進めることになっているのですが、どのようなプログラム文を作ったらよいか困ってます。。。どなたか教えてください。 REAL::a=-1.0,b=0.0,y1,y2,y3,x x=(a+b)/2.0 y1=a**3.0+a**2.0-5.0*a-2.0 y2=b**3.0+b**2.0-5.0*b-2.0 y3=x**3.0+x**2.0-5.0*x-2.0

  • VBSで繰り返し情報の取得

    BASP21で受信したメールを整形してデータベースへ取り込もうと考えています。 最初の情報は取り込むことができたのですが、次の情報を取り込むことができません。 どのようにしたらよいでしょうか。 届くメールの内容は以下のようになっています。 ---------------- From: メールサーバー To: 監視サーバー Subject: =監視状況 This is a multi-part message in MIME format. Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit 123サーバーのCPU使用率が10%上昇しました。 プロセス: ABCDaemon 日時: 2009/06/22 09:05:55 状況: 影響なし。 --------------------------------------------------- 345サーバーのCPU使用率が40%上昇しました。 プロセス:ServD 日時: 2009/06/22 09:05:55 状況: プロセスダウンしました。 ------hogehoge@smtp.hoge.co.jp-- このメールのサブジェクトやアドレス、メール本文の最初の情報(ここでは、123サーバーの~という4行です)は取得できました。 しかし、次の情報の(345サーバーの~)は取得できませんでした。 どのようにしたら取得できるようになるでしょうか。 なお、このメールで届く情報はひとつ以上であり、ひとつのメール内に複数の情報が入る場合があります。 もしおわかりになる方がいらっしゃいましたら、ご教示いただきたく存じます。 足りない情報は都度補足いたします。 よろしくお願いします。

  • VC++の電卓です

    初めての投稿になります。 VC++2005で演算子の優先度を識別する電卓を作成しようと試みているのですが、( )の処理がどうにもうまく行きません。 改善点など、ご意見を頂ければ幸いに思います。 詳細に関しては以下の通りです。 仕様 開発環境 VC++2005 開発対象 +-×÷( )の優先度を識別して計算を行う電卓。 備考 BackやCEの機能は考えず、まずは正しい計算結果を求めることが出来れば良い。 問題があると思われるコード //グローバル変数 int num[100];//数値を格納する配列 int op[100];//演算子を格納する配列 int num_count = 0;//数値配列の位置を格納する変数 int op_count = 0;//演算子配列の位置を格納する変数 int ans;//解答を表示 //計算処理 int calculat() { int num1 = num[num_count++];//最初の数値を格納 int num2 = 0;//一つ目の値と二つ目の値を格納しておく変数 int ope = op[op_count++];//最初の演算子を格納 while(ope > 0)//演算子が0(=)にならない限り計算を続ける { switch(ope) { //演算子が+か-の場合 case 1: case 2: num2 = calculat();//再帰的に calculat を呼び出す break; //演算子が×か÷の場合 case 3: case 4: //更に次の演算子が(の場合 if(op[op_count] == 5) { num2 =calculat(); break; } else { num2 = num[num_count++];//二つ目の数値にnum1の次の数値を格納 break; } //演算子が)の場合 case 6: return num1; break; } switch(ope)//格納されている演算子によって処理が異なる { //+の場合 case 1: num1 = num1 + num2; break; //-の場合 case 2: num1 = num1 - num2; break; //×の場合 case 3: num1 = num1 * num2; break; //÷の場合 case 4: num1 = num1 / num2; break; } //次の演算子を格納 ope = op[op_count++]; } return num1; } 計算処理を行う関数 calculat() を再帰的に呼び出すことで優先順位を付けた計算を行っている。 現在のコードで、四則演算までは問題なくこなすことが可能。 ( )を含めた計算も、ループに関しては問題ないが、正しい計算結果が返ってこない。 考えられる原因は計算処理の三行目 int num1 = num[num_count++]; 『演算子が(の場合』で再帰的に関数 calculat() を呼び出した際に限り、 num1に 0 が格納されてしまう。 = num[num_count++]; の処理が行われていない模様。 以上です。 非常に見づらいコードで申し訳ありませんが、よろしくお願いします。

  • Fortran90に関する質問です。

    次の問題が分かりません。 「3次方程式x^3+x^2-5x-2の解で、-1と0の間にあるものを求めるプログラムを示せ。(二分法)。ただし、x^3+x^2-5x-2の値の絶対値が0.0001以下であれば、xが解であるとみなすこと。」 取り敢えず、次のように式を設定しました。これ以降、DO構文を使って進めることになっているのですが、どのようなプログラム文を作ったらよいか困ってます。。。どなたか教えてください。 REAL::a=-1.0,b=0.0,y1,y2,y3,x x=(a+b)/2.0 y1=a**3.0+a**2.0-5.0*a-2.0 y2=b**3.0+b**2.0-5.0*b-2.0 y3=x**3.0+x**2.0-5.0*x-2.0

  • VC++の電卓です

    初めての投稿になります。 VC++2005で演算子の優先度を識別する電卓を作成しようと試みているのですが、( )の処理がどうにもうまく行きません。 改善点など、ご意見を頂ければ幸いに思います。 詳細に関しては以下の通りです。 仕様 開発環境 VC++2005 開発対象 +-×÷( )の優先度を識別して計算を行う電卓。 備考 BackやCEの機能は考えず、まずは正しい計算結果を求めることが出来れば良い。 問題があると思われるコード //グローバル変数 int num[100];//数値を格納する配列 int op[100];//演算子を格納する配列 int num_count = 0;//数値配列の位置を格納する変数 int op_count = 0;//演算子配列の位置を格納する変数 int ans;//解答を表示 //計算処理 int calculat() { int num1 = num[num_count++];//最初の数値を格納 int num2 = 0;//一つ目の値と二つ目の値を格納しておく変数 int ope = op[op_count++];//最初の演算子を格納 while(ope > 0)//演算子が0(=)にならない限り計算を続ける { switch(ope) { //演算子が+か-の場合 case 1: case 2: num2 = calculat();//再帰的に calculat を呼び出す break; //演算子が×か÷の場合 case 3: case 4: //更に次の演算子が(の場合 if(op[op_count] == 5) { num2 =calculat(); break; } else { num2 = num[num_count++];//二つ目の数値にnum1の次の数値を格納 break; } //演算子が)の場合 case 6: return num1; break; } switch(ope)//格納されている演算子によって処理が異なる { //+の場合 case 1: num1 = num1 + num2; break; //-の場合 case 2: num1 = num1 - num2; break; //×の場合 case 3: num1 = num1 * num2; break; //÷の場合 case 4: num1 = num1 / num2; break; } //次の演算子を格納 ope = op[op_count++]; } return num1; } 計算処理を行う関数 calculat() を再帰的に呼び出すことで優先順位を付けた計算を行っている。 現在のコードで、四則演算までは問題なくこなすことが可能。 ( )を含めた計算も、ループに関しては問題ないが、正しい計算結果が返ってこない。 考えられる原因は計算処理の三行目 int num1 = num[num_count++]; 『演算子が(の場合』で再帰的に関数 calculat() を呼び出した際に限り、 num1に 0 が格納されてしまう。 = num[num_count++]; の処理が行われていない模様。 以上です。 非常に見づらいコードで申し訳ありませんが、よろしくお願いします。

  • VC++の電卓です

    初めての投稿になります。 VC++2005で演算子の優先度を識別する電卓を作成しようと試みているのですが、( )の処理がどうにもうまく行きません。 改善点など、ご意見を頂ければ幸いに思います。 詳細に関しては以下の通りです。 仕様 開発環境 VC++2005 開発対象 +-×÷( )の優先度を識別して計算を行う電卓。 備考 BackやCEの機能は考えず、まずは正しい計算結果を求めることが出来れば良い。 問題があると思われるコード //グローバル変数 int num[100];//数値を格納する配列 int op[100];//演算子を格納する配列 int num_count = 0;//数値配列の位置を格納する変数 int op_count = 0;//演算子配列の位置を格納する変数 int ans;//解答を表示 //計算処理 int calculat() { int num1 = num[num_count++];//最初の数値を格納 int num2 = 0;//一つ目の値と二つ目の値を格納しておく変数 int ope = op[op_count++];//最初の演算子を格納 while(ope > 0)//演算子が0(=)にならない限り計算を続ける { switch(ope) { //演算子が+か-の場合 case 1: case 2: num2 = calculat();//再帰的に calculat を呼び出す break; //演算子が×か÷の場合 case 3: case 4: //更に次の演算子が(の場合 if(op[op_count] == 5) { num2 =calculat(); break; } else { num2 = num[num_count++];//二つ目の数値にnum1の次の数値を格納 break; } //演算子が)の場合 case 6: return num1; break; } switch(ope)//格納されている演算子によって処理が異なる { //+の場合 case 1: num1 = num1 + num2; break; //-の場合 case 2: num1 = num1 - num2; break; //×の場合 case 3: num1 = num1 * num2; break; //÷の場合 case 4: num1 = num1 / num2; break; } //次の演算子を格納 ope = op[op_count++]; } return num1; } 計算処理を行う関数 calculat() を再帰的に呼び出すことで優先順位を付けた計算を行っている。 現在のコードで、四則演算までは問題なくこなすことが可能。 ( )を含めた計算も、ループに関しては問題ないが、正しい計算結果が返ってこない。 考えられる原因は計算処理の三行目 int num1 = num[num_count++]; 『演算子が(の場合』で再帰的に関数 calculat() を呼び出した際に限り、 num1に 0 が格納されてしまう。 = num[num_count++]; の処理が行われていない模様。 以上です。 非常に見づらいコードで申し訳ありませんが、よろしくお願いします。