アプリ版:「スタンプのみでお礼する」機能のリリースについて

JAVAプログラミングとしては非常に基本的なことだと思うのですが、いくつかわからないことがあるので教えてください。
まず、0~3までの数字をchar型の配列要素として定義するために、
private static final char[] nch = {○○};
の○○の部分に記述しなければならないことは何ですか?
また、繰り返し構文を使うのに、inputstrの文字数の回数だけ繰り返し・配列nchの要素数の回数だけ繰り返しをそれぞれ{int i = 0 ; ○○; i ++} ・ {int j = 0 ; ××; j++}と記述するのですが、○○、××の部分の記述内容はどうなるのでしょうか?
最後に、StringBufferで定義されたbfnをString型に変えて戻り値とするにはreturnの後にどのように記述すればよいのでしょうか?
まだプログラミングを始めたばかりで応用がほとんどわからない状態です。回答よろしくお願いします。

A 回答 (2件)

質問内容から見ると、オブジェクト指向 & 変数の処理方法の理解がまだ掴めてないのかと思われます。



>private static final char[] nch = {○○};
{ } 内の引数の数によって、配列要素は決まってきます。

例)
private static final char[] nch = {a,b,c};

*解説*
・char[] … 1文字分、半角英数、全角だと"文字列"に成ってしまうのでerrorになる。

・{a,b,c} … 要するに以下の内容でも同じ意味合いになる。 表記の簡略化的な部分でメリットがあるかと。

char[0] = "a"
char[1] = "b"
char[2] = "c"

>{int i = 0 ; ○○; i ++}
for文の定義の理解が必要 ※必須になるかと

例)
for(i=0; i<=2; i++){
 繰り返す内容
}

*解説*
変数i に対して 0,1,2 …つまり3回繰り返せという命令。
javaの変数の開始は i=0; 部分で定義されている『0』の部分に注目、"開始番号"の宣言の意味合いになります。
『i』は変数名になります。
for文の解説書を参考にして見てみると、大抵『i,j』の表記が多いかと。別にここは a , b , だろうが、好きに変更可です。 1文字という制限もありません。 
例) abcdefghijklmnopqrstuvxyz だろうがOKです。

>StringBufferで定義されたbfnをString型に変えて戻り値とするにはreturnの後にどのように…

classの定義方法の理解 & インスタンス化って方法もあります。

良い参考例があるので記載しておきます。
【問題】
次のプログラムの実行結果として正しいものを選択して下さい。

class UseStringBuffer{
void method(StringBuffer a,StringBuffer b){
b.append(" There");
a=b;
}
}
public class ObjectArgument{
public static void main(String args[]){
StringBuffer sb1 = new StringBuffer("Happy");
StringBuffer sb2 = new StringBuffer("Happy");
UseStringBuffer usb = new UseStringBuffer( );
usb.method(sb1,sb2);
System.out.println("sb1 is " + sb1 + ":sb2 is " + sb2);
}

}

【選択肢】
a. 上記のいずれでもない
b. sb1 is Happy There:sb2 is Happy There
c. sb1 is Happy:sb2 is Happy There
d. sb1 is Happy There:sb2 is Happy
e. sb1 is Happy:sb2 is Happy

【解説】
Javaの基本事項として、次のポイントをおさえておきましょう。(1)基本データ型変数同士で代入をすると、内容は書き換わります。(2)参照型変数同士で代入をすると、両者が同じインスタンスを参照するようになるだけで、代入される方が参照していたインスタンスの内容は書き換わりません。

答え c

あとは、繰り返し数をこなして行けばだんだんと理解してくるかと。参考URLはjavaのバージョンによって異なるので、最新のものを手に入れてください。
以上、長文になりましたがご参考ください。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/inde …

この回答への補足

回答ありがとうございます。
char型に関しては解決されました。ありがとうございます。
for文についてですが、for文自体はわかっているのですが、実行の際に引数として与えた文字列の数をカウントしてその回数文だけ繰り返さなくてはならないのですが、int len = inputstr.length()を使わずに記述する方法がわかりません。i < inputstr.lengthとすればいいのでしょうか?
return文に関してもreturnそのものがよくわかっていないのか…
参考書(のようなもの)でやってみましょう、ということで出ている穴埋め方式の問題なのですが実行できずに困っています。

補足日時:2004/12/16 09:55
    • good
    • 0

こんにちは。


問題の全部を見ていないので正解かどうかわかりませんが、
●文字列の長さ、配列の長さ
文字列変数inputstrが与えられていて、inputstrの長さ分だけ繰り返せなら、
 for (int i=0; i < inputstr.length(); i++) {
とlength()メソッドを呼ぶしかないと思います。

あわせて、配列nch が書かれているので、これに要素数分繰り返しなら、
 for (int i=0; i < nch.length; i++) {
とlengthプロパティを使います(メソッドではありません。括弧がないことに注目)。

問題の意図が「for文のなかに直接length()メソッド/lengthプロパティを使うな」といった意味であれば、
 int strLength = inputstr.length();
 for (int i=0; i < strLength; i++) {
とか
 int arrayLength = nch.length;
 for (int i=0; i < arrayLength; i++) {
とかになるのではないでしょうか。


●StringBufferからStringへ
StringBufferクラスには、文字列Stringに変換するメソッドがあります。
toString()メソッドです。これを呼んで、returnするではないでしょうか?

●charについて
半角でも全角でも、また、英数かなカナどれでも1文字は1文字です。ちょっと難しいですがUTF-8という文字コードで1組のコードで表せれば、char1つで取り扱いできます。
つまり、
 char c1 = '1';
 char c2 = '1';
 char c3 = 'あ';
 char c4 = 'ア';
どれも、合法。エラーにはなりません。
ただし、シングルコーテーションではなく、ダブルコーテーションで囲むと、1文字でも、「文字」ではなく「文字列」になりますので、ご注意ください。
 char c1 = "1";
 char c2 = "1";
 char c3 = "あ";
 char c4 = "ア";
いずれもコンパイルエラーになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
lengthプロパティをメソッドと勘違いして()をつけてしまっていたのと、charではダブルコーテーションで囲ってしまっていました。
的確な指摘、ありがとうございました。

お礼日時:2004/12/17 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!