2016-04-29 25 views
-2

アレイの最大値/最小値をhereから調べるという考えがありました。それは驚異的ですが、コードを分割してコンパクトにする方法があるのだろうかと思います。たぶん何らかの命令がありますか?私は知らないので、それが私にあなたに尋ねる理由です。String []配列の最大値または最小値を取得する方法は?

public static void main(String[] args) { 
    String[] input = JOptionPane.showInputDialog("What are you grades this month?\nThey must be seperated by spaces.").split(" "); 

    int smallest = Integer.parseInt(input[0]); 
    int largest = Integer.parseInt(input[0]); 

    for (int i = 1; i < input.length; i++) { 
     if (Integer.parseInt(input[i]) > largest) { 
      largest = Integer.parseInt(input[i]); 
     } 
     else if (Integer.parseInt(input[i]) < smallest) { 
      smallest = Integer.parseInt(input[i]); 
     } 
    } 
} 

答えて

3

この例では、私のコードは、文字列配列で始まる

Integer [] myIntArray = new Integer[]{0, 5, 2, 11}; 
Arrays.sort(myIntArray); 

//Output smallest 
System.out.println(myIntArray[0]); 

//Output largest 
System.out.println(myIntArray[myIntArray.length - 1]); 
+0

これは機能しますが、最小番号の出力に対してのみ有効です。私は、あなたの心の中で、最大のアウトプットがどのように働くのか、わからないのですか?入力の長さから数字 "1"を減算するだけです(つまり、入力が13桁の場合、この行の出力は 'System.out.println(myIntArray [myIntArray.length - 1])')、12 )。 –

+0

長さが13の配列の場合、配列の位置は0から12の間で、従って長さは1であると解釈されます。 –

+0

ごめんなさい。私はあなたのコードの一部を見落としました。ありがとう。 –

0

アイデアはバスコのと同じですが、あなたのコードを簡素化し、使用するセット:

String[] gradesAsString = { "12", "14", "8", "43"}; 
Set<Integer> grades = new HashSet<>(gradesAsString.length); 

for(String grade : gradesAsString) { 
    grades.add(Integer.parseInt(grade)); 
} 

// Sort the collection and get the first (as min) and last (as max) is better for performance 
int max = Collections.max(grades); 
int min = Collections.min(grades); 

このコードが完全ではない場合は、使用するとNumberFormatExceptionをキャッチする必要がありますInteger.parseInt(str)

Setを使うのは、最小値と最大値をチェックしたいからです。他に何かしたいのであれば、平均値を計算するようにしてください。

関連する問題