プロが教える店舗&オフィスのセキュリティ対策術

/*
1から50まで順に数を表示する。
但し、その数が3の倍数か3の付く数字の場合、数字の後に!を表示する。
5 の倍数の場合は、数字の後に?と表示する。
両方の条件に合致した場合、数字の後に!?と表示する。
*/
class Show{
public static void main(String[] args){
int i = 1;
   while(i <= 50){
      if(i % 3 == 0 && i % 5 ==0){
       System.out.println(i + "!?");
     }else if(i % 5 == 0){
       System.out.println(i + "?");
     }else if(i % 3 == 0){
       System.out.println(i + "!");
     }else{
       System.out.println(i);
     }
     i++;
  }
}

このような問題で、3を含む数字、とあるので、文字列の部分一致を検索する時に使用するStringクラスのindexOfを使用するのでは?と考えています。しかし、こちらはequalsで判定しますが、3の倍数は上記のコードにもある通り、==で判定しています。文字列判定と ==演算子は同じif(条件)の中には入れる事が出来ないので、じゃあどうする?という具合になってしまっています。どなたか「数が3の倍数か3の付く数字の場合」の処理を教えて頂けないでしょう?よろしくお願い致します。

A 回答 (2件)

そうですねぇ……よく考えてください。

「数が3の倍数か3の付く数字の場合」という言葉は「数が『数が3の倍数か3の付く数字か』に対して true の場合」という意味ですよね?
つまり、上記の『』の中を判定できるメソッドがあったら、それを使って main() を書き直せますよね?
ならば、そう書き直した後はそういう判定をできるメソッドを書いてしまえば完成ですよね?

どうやら宿題っぽいので、後はがんばれ。
    • good
    • 0

> 文字列判定と ==演算子は同じif(条件)の中には入れる事が出来ない



どうしてそんな結論に?
i % 3 == 0 というのは「 i %3 と 0 が等しければtrue、そうでなければfalse」という計算式です。
String.Equalsも、文字列を比較して、trueかfalseを返すメソッドです。
&& とか || も、前後がtrueかfalseかの組合せで、trueかfalseを返す計算式です。
if で判断するのは、最終的な true かfalseか、です。途中の式は直接関係はありません。
組合せても、まったく問題ありません。

もっとも、indexOfを使っているのに、なぜEqualsが出てくるかがわかりませんが
    • good
    • 0

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


このQ&Aを見た人がよく見るQ&A