1

Javaの書き方を学ぶ一環として、私はWeb上switchで複数のケースのステートメントを見つけました。

このステートメントの問題は、引数をcasesとして使用する単一の数値と比較することですが、引数が属する値の範囲に基づいてフローを区別したい場合はどうなりますか?

たくさん使うよりもエレガントな方法はありifますか?スキームcondのステートメントのようなものを探しています。

public class Assignment02Q03 {
   public static void main(String[] args){
      int grade = Integer.parseInt(args[0]);
      if (grade >= 90) {
         System.out.println("A");
      } else {
         if (grade >= 80 ){
            System.out.println("B");
         } else {
            if (grade >= 70){
               System.out.println("C");
            }else {
               if (grade >= 60){
                  System.out.println("D");
               }else { 
                  System.out.println("F");
               }
            }
         }  
      } 
   }
}

もっとエレガントなものがあるはずです:)

ありがとうございました!

4

6 に答える 6

7

一般的に次のように書かれています:

if (grade >= 90) {
    System.out.println("A");
} else if (grade>=80 ) {
    System.out.println("B");
} else if (grade>=70) {
    System.out.println("C");
} else if (grade>=60) {
    System.out.println("D");
} else { 
    System.out.println("F");
}

について特別なことは何もありませんelse if。中括弧は、単一のステートメント、この場合はif-elseステートメントで置き換えることができます。インデントは、この言語では他に類を見ないものですが、わかりやすいイディオムです。

式には、三項演算子もあります。

System.out.println(
    grade>=90 ? "A" :
    grade>=80 ? "B" :
    grade>=70 ? "C" :
    grade>=60 ? "D" :
    "F"
);
于 2011-03-10T20:15:53.417 に答える
5

Javaには、、ifs構文switch case、およびternary operator(短縮形if)があります。エレガントなものはないと思います:)

于 2011-03-10T19:53:53.287 に答える
2

言語には何も組み込まれていません。Runnable簡潔で迅速なコードの場合、テスト値またはCallableアクションをマップするマップを作成できます。ただし、マップの内容に関する情報をコード内の他の場所で探す必要があるため、これは少し不透明になる傾向があります。

于 2011-03-10T19:55:35.283 に答える
1
if (a > b) 
{
  max = a;
}
else 
{
  max = b;
}

このように書くことができます...

max = (a > b) ? a : b;
于 2011-03-10T19:55:57.170 に答える
1

他の多くの言語と同様に、3値のif-testを使用できます。

String text = (1 < 10) ? "One is not greater than ten!" : "One is greater than ten";
于 2011-03-10T19:57:51.477 に答える
1

JavaにはOOPとポリモーフィズムがあります)あなたはsmtのように書くことができます

 ActionFactory.create(grade).execute()

 //returns some instance
 public static AbstractAction create(int grade){
      //can be based on Maps as @Ted Hopp mentioned
      if(grade >= 0){
           return new PositiveAction();
      } else {
           return new NegativeAction();
      }
 }
 //can be interface
 class AbstractAction{
     public abstract void execute();
 }
 class PositiveAction extends AbstractAction {
     public void execute(){Sout("positive");}
 }
 class NegativeAction extends AbstractAction {
     public void execute(){Sout("negative");}
 }

より冗長に見えますが、実際のタスクでは機能します。Javaは洗練されたソリューションには向いていません。仕事のためのJava。Javaを感じる)

于 2011-03-10T20:19:18.693 に答える