• ベストアンサー

for文の()内のメソッドは?

普通、String型の変数strの長さを知りたいと 思ったら str.length() で調べると思うのですが、 for 文中では、こういう風になりますよね‥‥ for (int i=0; str.length; i++) ただ、while文の()内では、ちゃんとlengthメソッドの 後に()を付けていたはず。 for文の場合の()は特殊なのかなと思うのですが、 これってどういう理屈なのでしょうか? # ;(セミコロン)がどうも怪しい感じなのですが。

  • yuui
  • お礼率66% (8/12)
  • Java
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • melonpan
  • ベストアンサー率27% (3/11)
回答No.1

まず、 >for文の場合の()は特殊なのかなと思うのですが、 for文内であろうと、String.length()の()がはずすことはできません。 どの本にfor (int i=0; str.length; i++) といった文がかかれていたのはわかりませんが、 考えられる原因として、以下の2点が挙げられます。 1.strが配列である。 配列の場合、配列の要素の数を調べるときには hogehoge.length というように、()はつけません。 先ほどのforループの中に str[i] といった記述があれば、strは配列です。 変数strの定義をもう一度確認してください。 2.記述ミス String型の変数strの文字列の長さを調べようとしているのに、 メソッドの括弧を付け忘れた可能性もあります。 いずれにせよ、str変数の定義をもう一度確認してみてください。

yuui
質問者

お礼

回答、ありがとうございます。 ご指摘のとおり、strはString[]型(配列型)でした。 なるほど、配列の要素数はカッコなしの.lengthで得るのですね。 ただ、.length()はメソッドだということは分かるのですが、「.length」はJavaの文法用語でいう何にあたるのでしょうか。インスタンスフィールドでしょうか?(つまり配列型の変数が生成される時に、lengthフィールドに要素数が格納されているということなのでしょうか) APIリファレンスでArray型を調べたのですが、それらしきフィールドは見あたらないようでした‥‥。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

>「.length」はJavaの文法用語でいう何にあたるのでしょうか もしかして JavaScript? であれば、プロパティ(Property)です。 参考URLには、Netscape のリファレンスの該当ページを示しておきます。

参考URL:
http://developer.netscape.com/docs/manuals/communicator/jsref/core1.htm#1080770
yuui
質問者

お礼

回答、ありがとうございます。 >もしかして JavaScript? >であれば、プロパティ(Property)です。 いえ、JavaScriptではなく、Javaです。 でもなるほど、JavaScriptではプロパティですか。 なにかヒントを掴めそうな気もするので、 この機会にJavaScriptも勉強してみます(^^)

関連するQ&A

  • for文

    質問お願い致します。 これのソースのfor文を一つの文にするにはどのように書いたらよいでしょうか? お願い致します。 //指定された文字列が"a"と"b"の両方を含む場合はtrue、なければfalseを返す public class Mondai { public static void main(String[] args) { System.out.println("解答 :" + charBothContain("Habllow")); } public static boolean charBothContain(String str) { boolean answer1 = false; boolean answer2 = false; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'a') { answer1 = true; break; } } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'b') { answer2 = true; break; } } return answer1 && answer2; } }

    • ベストアンサー
    • Java
  • for文について

    以下のプログラムにおいて, for文の末尾にセミコロンがついているタイプ( for(...); ) のfor文の制御の流れは,セミコロンがついていないタイプ( for(...) ) と何が違うのでしょうか? for文の末尾にセミコロンがないタイプのものしか知らないため, セミコロンがつくことで流れに何が変化するか知りたいです. 御存知の方がいらしたら,教えてください. 【出力結果】 forの末尾にセミコロンがある 2100 forの末尾にセミコロンがない 700 /*+++++++ ソース ++++++++*/ #include <stdio.h> int main() {  int s_tb1[3] = {60,100,150};  int mg_tb[3] = {1,3,4};  int i,size=80,base=600,mode=1,ext=100;  for(i=0; size>s_tb1[i]; i++);   printf("%d\n", (base+mode*ext)*mg_tb[i] );  return(0); }

  • メソッドを跨いだfor文に関しまして

    皆さん、こんにちわ。 JAVAプログミィングを始めたばかりの初心者です。 自分では解決に至らない内容でしたが、 とっても簡単な質問でしたらごめんなさい。 初心者の割には周りに質問できる人もいないため、 アドバイスいただけるとありがたいです。 今回は、For文の使い方で分からないことがありましたが、 キーワードが悪いのか、 googleで調べきれず、 質問させていただきたく書き込みました。 以下のように、 クラス内で特定の2つのメソッドだけを、 for文で2000回繰り返し処理を行いたいと思っています。 これって、可能なものなのでしょうか? もし可能な場合ですが、 ずずしく大変恐縮ですが、 サンプルの場所などご指摘いただけますと大変ありがたい次第です。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ class { ・メソッド(1){}; ・メソッド(2){}; for (int i = 1 ; i <= 2000 ; i++){ ・メソッド(3){}; ・メソッド(4){}; } }  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ※メソッド3とメソッド4のみ2000回繰り返す感じです。

    • ベストアンサー
    • Java
  • for文とStringBuffer

    javaのfor文の使い方 質問者:asutarisuk コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

    • ベストアンサー
    • Java
  • javaのfor文の使い方

    コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

  • java for文、if文を使っての三角形

    例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を   作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが   出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);

  • for文

    以下のプログラムのforの条件文がなぜこれで動くのかよくわからないので 教えていただけないでしょうか? #include<stdio.h> int main(void) { int i; char str[] = "ABC"; char *ptr = "123"; for(i=0;str[i];i++) putchar(str[i]); putchar('\n'); for(i=0;ptr[i];i++) putchar(ptr[i]); putchar('\n'); printf("str = \"%s\"\n",str); printf("ptr = \"%s\"\n",ptr); return(0); }

  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • string型からint型への型変換

    C++で、string型からint型は、 string str; //ほかのstring型の変数から整数部分のみを切り出して来たものが入る int i; //ここにstrの中身(整数)をあらたに入れたい が定義されている下で、 char s[10]="0"; などを通して、 int length=str.length(); str.copy(s,length,0); i=atoi(s); とやる他ないのでしょうか? 初心者のつまらない質問ですが、ご教授いただけると幸です。 よろしくお願いします。

  • 静的変数と静的メソッドの使い方について

    独習JAVAにてJAVAを学習しています。「コマンドライン引数を受け取り、それをスペイン語表記に変換して表示するアプリケーションを作成しなさい。例えば、OneはUno、・・・、FiveはCincoになります。静的メソッドを使って実現しなさい」という問題で躓きました。以下、私が作成したプログラムです。 class Language { static String st[] = new String[5]; //静的初期化ブロックは実行しない。 //コマンドライン引数を受け取るmainメソッドが使えないため //静的メソッド static String translation(){ for(int i = 0; i < st.length; i++) { if(st[i] == "One") return st[i] = "Uno"; if(st[i] == "Two") return st[i] = "Dos"; if(st[i] == "Three") return st[i] = "Tres"; if(st[i] == "Four") return st[i] = "Quatro"; if(st[i] == "Five") return st[i] = "Cinco"; } } //21行目 } class StaticalMethodPractice { public static void main(String args[]) { //mainメソッドが登場したので、静的変数を初期化する for(int i = 0; i < Language.st.length; i++) Language.st[i] = args[i]; //静的メソッドを実行 System.out.println(Language.translation()); } } このプログラムに対して、21行目return文が指定されていませんというエラーメッセージが出てくるのですが、そもそもreturnの使い方もよく分からないので右往左往している状況です。低級な質問かもしれませんが、よかったらアドバイスの方よろしくお願いします。

専門家に質問してみよう