みんなの「教えて(疑問・質問)」にみんなで「答える」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;

}

}

投稿日時 - 2007-06-13 10:01:34

QNo.3080577

すぐに回答ほしいです

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

ループの中で、「両方見つかった?」判定をして、「見つかった」ならtrueで終了。
そうではなくて、ループが終わった→見つからなかった→false
という形式にしました。

ループの中での return が嫌なら、そこはbreakにしといて、
ループの後のreturn false を return answer1 && answer2 とする。

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;
}
if (c == 'b') {
answer2 = true;
}
// 両方とも見つかれば、終了。
if (answer1 && answer2) {
return true;
}
}

// 「両方とも見つかった」に成らずにループを終わったのでfalse。
return false;
}

投稿日時 - 2007-06-13 11:48:24

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

何のためにfor文を一つにしたいのでしょうか。

public static boolean charBothContain(String str) {
return charContain(str, 'a') && charContain(str, 'b');
}

public static boolean charContain(String str, char ch) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ch)
return true;
}
return false;
}

投稿日時 - 2007-06-13 20:50:24

public class Mondai2 {
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;
}
if (c == 'b') {
answer2 = true;
}
}
return answer1 && answer2;

}

}

/*
ってな感じ?
別にelse ifでもいいけど。
break;しないようにした。
*/

投稿日時 - 2007-06-13 11:36:28

public class Mondai {
public static void main(String[] args) {
System.out.println("解答 :" + charBothContain("Habllow"));
}

public static boolean charBothContain(String str) {

return ((str.indexOf("a") != -1) && (str.indexOf("b") != -1));

}

}

/* って方が早いのでは? */

投稿日時 - 2007-06-13 10:19:55

お礼

ご回答頂きありがとうございました。
for文で考えたいのでfor文の回答も頂けたら幸いです

投稿日時 - 2007-06-13 10:54:21