• 締切済み

javaプログラムの作り方

class HTMLparam extends IO_Data_D { String s; int max_lean; Applet a; HTMLparam(int _max_lean, String _s, Applet _a) { max_lean = _max_lean; s = _s ; a = _a;} //-------------------------------------- Object getParam() { String param; char separated[][]; for(int i=0; i<max_lean; i++) { param = a.getParameter( s + (i+1) ); for(int j=0; j<max_lean; j++) { if(param != null ){ separated[][] = new char [max_lean][ param.length() ]; ???????????????????????????; } } return ; } } すごい初歩的な質問で申し訳ありません。いまいちキャストの仕方がよくわかっていません。質問というのは、param = a.getParameter( s + (i+1) );でparamに文字列が入ります。max_leanの行数文の文字列を文字配列にして文字を管理し、オブジェクトでリターンしたいのですが、どのように作っていいのかわかりません。教えていただけないでしょうか?

  • Java
  • 回答数1
  • ありがとう数7

みんなの回答

  • bajiru8
  • ベストアンサー率50% (1/2)
回答No.1

charの配列を使うのは,Javaっぽくないです。 Stringを使いましょう。 それをVectorに格納していくことで、 charの2次元配列の代用としましょう。 //Object getParam() { Vector getParam(){ String param; //char separated[][]; //char配列の代わりにVectorにStringを格納する Vector strVector = new Vector(); for(int i=0; i<max_lean; i++) { param = a.getParameter( s + (i+1) ); //Vectorに一つずつ格納していく strVector.addElement(param); } retrun strVector; }

cyan1110
質問者

お礼

よきアドバイスありがとうございました。

関連するQ&A

  • プログラムのことで

    次のプログラムの変数の説明と処理の流れを素人でも理解できるように説明してもらえないでしょうか。 #include <stdio.h> #define MAX 128 int str_comp(char nx[], char ny[]){ int i, j, k=0; for(i=0; i<=MAX; i++){ if( nx[i]=='\0' ){ return 0; } else if( nx[i]==ny[0] ){ for( j=0; nx[i]==ny[j]; j++ ){ i++; } if( ny[j]=='\0' ){ return 1; } } } } int main(void) { char namex[MAX}; char namey[MAX}; int n; int i; printf("文字列x(64文字まで)? "); scanf("%s",namex); printf("文字列y(64文字まで)? "); scanf("%s",namey); n=str_comp(namex,namey); if(n==1){ printf("'%s'に'%s'は含まれます\n",namex,namey); } else if(n==0){ printf("'%s'に'%s'は含まれません\n",namex,namey); } return 0; } 実効結果 文字列x(64文字まで)? Katatsumuri  文字列y(64文字まで)? ta 'Katatsumuri'に'ta'は含まれます. エラーは出ないはずです。 よろしくお願いします。

  • javaで素数を探すプログラム。

    javaで素数を探すプログラム。 初歩的なことかと思いますが、助言をお願いします。 if(a[i-1]) ←この部分がわかりません。これはどのような条件がなのでしょうか? class Prime { public static void main(String[] args) { int max = 100; // 素数を探す数の最大値 boolean[] a = new boolean[max]; // 素数かどうか判定する配列 // 配列の初期化 for(int i = 0; i < max; i++) a[i] = true; // 素数かどうか判定 for(int i = 2; i < max; i++) { if(a[i-1]) { for(int j = 2; i*j <= max; j++) a[i * j - 1] = false; } else continue; } // 結果を表示 for(int i = 1; i < max; i++) { if(a[i]) System.out.print((i + 1) + " "); } System.out.println(); } } このプログラム

    • ベストアンサー
    • Java
  • アプレットからHTMLのパラメータ獲得について

    長文になりますが、すみません。 アプレットからHTMLのパラメータ獲得についてですが、 通常はAppletクラスの[getParameter(String)]メソッド を使用しますよね。 この時、例えば、HTML側で同一種類の情報としてアプレットに対して渡したい場合、 <param name="Color1" value="black"> <param name="Color2" value="white"> <param name="Color3" value="blue"> <param name="Color4" value="red"> として (Colorの次に来る数字は、1始まり固定で+1ずつ増え最後の数字はHTML表示する毎に変わります。)、 アプレット側はこの"Color"情報を配列で管理したい場合、この情報を格納する配列変数の初期化をするのに簡単に知る方法はないでしょうか? 私が思いつくのは 一回配列変数の要素数を確定するために ------------------------------------------------ String[] color; int counter; for(int i = 1; i < Applet.getParameter("Color"+ i) != null; i++) { counter++; } color = new String[counter]; ------------------------------------------------ とループして要素数を確定した後にもう一度Stringオブジェクトに値を代入するために ------------------------------------------------ for(int i = 0; i < counter; i++) { color[i] = Applet.getParameter("Color"+ i); } ------------------------------------------------ と二重にループするしか方法はないのでしょうか? 数を知る方法だけでなくとも、 他にスマートに情報を獲得する方法はないでしょうか?

  • 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
  • Javaの初歩的なプログラムについて

    public class ForInFor{ public static void main(String[] args){ for(int i=1; i<=9; i++){ String a = ""; for(int j=1; j<=9; j++){ a += i * j + " "; } System.out.println(a); } } } を実行すると九九の表のようになりました。 println(a)の中のaはjの方のforの繰り返しが終わったら代入するものだと思っていましたので 戸惑っています。 実際にはどういう流れで九九の表ができるのでしょうか?

  • javaの課題・・

    package jp.tuyano; import java.applet.Applet; import java.awt.Color; public class TestApplet19_07 extends Applet{ public void init(){ /* 普通の文字列を所得する場合 */ String strAddress = getParameter("ADDRESS"); if( strAddress == null ) strAddress = new String("住所不定"); /* WORD0, WORD1, ・・・, WORD20のパラメータを取得する場合 */ /* ただし、WORD20までは無いかもしれない */ String[] strWord = new String[20]; for(int i = 1 ; i < 20 ; i++ ){ strWord[i] = getParameter("WORD"+i); if ( strWord[i] == null ) break; } /* 色を"FFFF00"(黄色)のようなフォーマットで取得する場合 */ String strColor = getParameter("COLOR"); Color clr; try{ int r = Integer.parseInt( strColor.substring(0,2), 16 ); int g = Integer.parseInt( strColor.substring(2,4), 16 ); int b = Integer.parseInt( strColor.substring(4,6), 16 ); clr = new Color(r,g,b); }catch(Exception e){ System.err.println("カラーの設定が不正です:"+e); clr = new Color(0,0,0); } /* 数字を取得する場合 */ int n; try{ n = Integer.parseInt( getParameter("SIZE"), 10 ); }catch(Exception e){ n = 0; } } } あるサイトの例のソースを試しにeclipseに貼ってみたのですがどうも実行がうまくできません。 出たエラーが     この行に複数マーカーがあります - ローカル変数 clr は読み取られません - ローカル変数 clr は読み取られません Color clr; に黄色線が出て上記のような警告 この行に複数マーカーがあります - ローカル変数 n は読 み取られません int n;に黄色線がでて上記のような警告 またシリアライズ可能クラス TestApplet19_07 は long 型の static final serialVersionUID フィールドを宣言していません と public class TestApplet19_07 extends Applet{ の行に出ます ちなみに参考にしたサイトはhttp://www5c.biglobe.ne.jp/~ecb/java/19_07.htmlです 誰か教えてくれませんか><

  • 置換をするプログラム

    visual C++で入力された文字列に対し、#があったら%に置換するプログラムを作っています。insertを使おうと思うのですが、よくわかりません ずっと考えているのですが、ここから1週間進んでいません 教えてください #include<iostream> #include<string> #include<cstdlib> using namespace std; int main(void) { string a,s; cout <<"文字列を入力してください"<<endl; getline(cin,s); int i,j=0; while( j!= s.npos) { i=s.find_first_of("#",j); if(i==s.npos){ cout << s.substr(j) << endl; break; } if( i>0) { cout << s.substr(j, i-j); j=i; } i=s.find_first_not_of("#",j); if( i== s.npos) { a=s.substr(j); j=i; } else{ a=s.substr(j,i-j); j=i; } for(i=0; i<s.length(); i++) { if (s[i]== "#"){ s.insert(i,"%"); } cout<<a.s[i]<<endl; } } return 0; }

  • 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
  • プログラムについて

    今スタっクのファイルから読み込んだ文字列をスタっクへプっシュしたりポっプしたりする過程がわかるプログラムを作ってます 。 作りかけのプログラムですがどこをどうすればいいか教えてください!! 一応コンパイルできます。 使ってない関数があるかもしれません。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define NUMBER 100 /*--- スタックを実現する構造体 ---*/ typedef struct { int max; /* スタックのサイズ */ int ptr; /* スタックポインタ */ char *stk; /* スタック(の先頭要素へのポインタ) */ } Stack; /*--- スタックの初期化 ---*/ int StackAlloc(Stack *s, int max) { s->ptr = 0; if ((s->stk = calloc(max, sizeof(int))) == NULL) { s->max = 0; /* 配列の確保に失敗 */ return (-1); } s->max = max; return (0); } /*--- スタックの後始末 ---*/ void StackFree(Stack *s) { if (s->stk != NULL) { free(s->stk); s->max = s->ptr = 0; } } /*--- スタックにデータをプッシュ ---*/ int StackPush(Stack *s, int x, int i,char *a[]) { if (s->ptr >= s->max) return (-1); if(x>=i) { puts("プッシュできる文字データはありません。"); return (-1); } strcpy(&s->stk[s->ptr++],&(*a)[x]); x++; return x; } /*--- スタックからデータをポップ ---*/ int StackPop(Stack *s, int x,char *a[]) { if (s->ptr <= 0) /* スタックは空 */ return (-1); strcpy(&s->stk[--s->ptr],&(*a)[x]); return (0); } /*--- スタックからデータをピーク ---*/ int StackPeek(const Stack *s, int *x) { if (s->ptr <= 0) /* スタックは空 */ return (-1); *x = s->stk[s->ptr - 1]; return (0); } /*--- スタックの大きさ ---*/ int StackSize(const Stack *s) { return (s->max); } /*--- スタックに積まれているデータ数 ---*/ int StackNo(const Stack *s) { return (s->ptr); } /*--- スタックは空か ---*/ int StackIsEmpty(const Stack *s) { return (s->ptr <= 0); } /*--- スタックは満杯か ---*/ int StackIsFull(const Stack *s) { return (s->ptr >= s->max); } /*--- スタックを空にする ---*/ void StackClear(Stack *s) { s->ptr = 0; } int main(void) { int i=0,j,ret,x=0; char *a[NUMBER]; char buffer[20]; FILE *fpin; Stack s; fpin=fopen("input2.txt","r"); //テキストファイルを読み取りモードで開く while(fgets(&buffer[0],sizeof(buffer),fpin) !=NULL ) { if(i>=NUMBER)//読み込む人数がNUMBERを超えてる時の処理 { puts("人数が100人を超えています"); goto END; } strcpy(&a[i][0],&buffer[0]); /*ret=sscanf(&buffer[0],"%s",&a[i][0]); //データ文字列を3分割 if(ret!=1) //1に分割できなかったときの処理 { puts("代入された入力項目の個数が3でありません"); goto END; }*/ i++; } for(j=0; j<i; j++) printf("%s\n",&(*a)[j]); if (StackAlloc(&s, 100) == -1) { puts("スタックの確保に失敗しました。"); return (1); } while (1) { int m; printf("現在のデータ数:%d/%d\n", StackNo(&s), StackSize(&s)); printf("(1) プッシュ (2) ポップ (0) 終了:"); scanf("%d", &m); if (m == 0) break; switch (m) { case 1: printf("データ:"); puts("こんちくしょ~"); if(StackPush(&s, x,i,&(*a)) == -1) puts("スタックへのプッシュに失敗しました。"); break; case 2: if(StackPop(&s, x,&(*a)) == -1) puts("ポップできません。"); else printf("ポップしたデータは%sです。\n", &s.stk[s.ptr]); break; } } StackFree(&s); END: fclose(fpin); return (0); }

  • スタックのプログラムを作成しているのですが、うまく出来ません。

    プログラムの内容を簡単に言うと、配列s[100]と変数topを用いて、ファイルdata.datからgetc()を用いて文字を1文字ずつ読み込み、スタック(s[100])にpush-downするプログラムです。 細かく言うと、作成したプログラムによりファイルからキー(文字)を読み込みスタックにpush-downし、スタックの内容を表示した後に、キーボードからキー(文字)を1文字ずつ入力して、スタックを操作する。 ・スタック操作の仕様はキーボードからキー(文字)を1文字ずつ入力する際に、0を入力した場合、プログラム終了。1を入力した場合、1文字pop-upした後、pop-upした文字とスタックの内容を表示。その他の文字を入力した場合、その文字をpush-downした後、スタックの内容を表示。(スタックの内容の表示はprint_stack_mtrx(s,top)を使用する。) ・push-downとpop-upはそれぞれ1つの関数で定義する。 といった感じのプログラムを作成しているのですが、関数push,popの部分をどう書いたら良いのか良く分かりません。一応自分で書いてみたのですが、うまくいきませんでした。どなたか教えていただけないでしょうか? *ファイルdata.datからはリダイレクションを用いて読み込む。 <作成途中のソースプログラム> #include<stdio.h> #include<stdlib.h> #define MAX 100 char s[MAX]; int top; void init_stack(){ ______top = 0; _______return; } void print_stack_mtrx(char* s, int top){ __int i; ____if(top == 0){ ______printf("Stack is empty.\n"); ____} ____else{ ______printf("--- Contents of Stack ---\n"); ______for(i = 0; i < top; i++){ ________if(!i){ __________printf("%2c < -- Top (%2d)\n", s[top - i - 1], top); ________} ________else{ __________printf("%2c \n", s[top - i - 1]); ________} ______} ______printf("-------------------------\n"); ____} } char push(char* s, int top, char j){ ___s[top]=j; ___top++; } char pop(char* s, int top){ _char c; ___c = s[top]; ___top--; ___return c; } int main(void) { _int c; _char j; _char i; init_stack(); _______while(((c=getc(stdin))!=EOF) && top<MAX){ _______/* ファイルdata.dat からgetc()を用いて1文字ずつ読み込みスタックsに格納.ただしスタックの出入り口を示す top の値も監視すること*/ _________s[top] = c; _________top++; _______} _______print_stack_mtrx( s, top );/* スタック(配列)の内容を表示する関数*/ _______while(1){ _________scanf("%c\n", &j); _________if(j=='0'){ ___________break; _________} _________else if(j=='1'){ ___/* 1文字pop-upした後, pop-upした文字とスタックの内容を表示 */ ___________i = pop(s, top); ___________printf("pop-upした文字: %c\n", i); ___________print_stack_mtrx( s, top ); _________} _________else{ ___/* その他の文字を入力した場合, その文字をpush-downした後,スタックの内容を表示 */ ___________push(s, top, j); ___________print_stack_mtrx( s, top ); _________} _______} _______return 0; }

専門家に質問してみよう