0

私は以前の試験の質問に答えていますが、私の質問は、文字列の長さを決定して返す正しい方法は何ですか。

文字列の長さが5文字未満の場合は、次の方法で返すことができます。

public static String first5(String s){
     if(s.length() < 5)
     return s;
}

ただし、文字列が5文字を超える場合は、次の方法で返すことができます。

public static String first5(String s){

     return s.substring(0, 4);
}

私が注意しなければならないのは、クラス内のテストで以前にこのタイプの質問に答えたとき、私の講師は「マジックナンバー」を実際に使用するべきではないと強調したということです。しかし、彼が実際にそれが何を意味していたのかはわかりません。

このタイプのメソッドを返すためのより良い方法はありますか?

私はまだJavaを学んでいるので、構文の誤りは許してください。

どうもありがとう。

4

4 に答える 4

3

これはあなたの方法でなければなりませんfirst5

public static String first5(String s){
  return s.length() < 5? s : s.substring(0, 5);
}

ここにはマジック ナンバーはありませんが、おそらく先生は数字の 5 がマジック ナンバーであることを意味し、関数を一般化するよう求めたのでしょう。

public static String firstN(String s, int n){
  return s.length() < n? s : s.substring(0, n);
}
于 2013-03-19T20:33:13.193 に答える
1

基本的に、要件が変更された場合、1 つの場所で値を簡単に変更できます。したがって、参照されているすべての場所で変更されます。古い要件の断片がコード内に散らばっていることを心配する必要はありません。これは一般に、大量のコードで従うのに適した規則です。

public class solution {
    static final int VAR1 = 0;
    static final int VAR2 = 4;
    static final int VAR3 = 5;
    public static String first5(String s){
        if(s.length() < VAR3) { 
            return s;
        } else {
            return s.substring(VAR1, VAR2);
        }
    }
}

もちろん、変数名には、クラス/アプリケーション自体にとって意味のある名前を付ける必要があります。

于 2013-03-19T20:34:11.633 に答える
1

if ステートメントを使用することはそれほど恥ずかしいことではないことに注意してください。

String r = null;
if (s.length() < 5) {
    r = s;
}
else {
    r = s.substring(0,5);
}
return r;

を使用する場合よりもロジックが明確になります?:。後者の利点は、占有する画面領域が少ないため、より多くの大きな機能を画面に表示できることです。大きな機能がある場合は価値がありますが、そうでない場合は非生産的です。

于 2013-03-19T20:39:25.893 に答える
0

あなたの質問は5番ですか?そうでない場合は、文字列入力で入力引数として数値を取得します。

于 2013-03-19T20:34:45.213 に答える