質問: in.nextInt(); if(t<0) { Minus.add(t); }else if(t>0) { Plus.add(t); } } Collections.sort(Plus); Collections.sort(Minus); if(Minus.isEmpty()) { answer=Plus.get(0); } else if(Plus.isEmpty()) { answer=Minus.get(Minus.size()); } else { if(Math.abs(Plus.get(0))>Math.abs(Minus.size())) answer =Minus.size()*-1; else if(Math.abs(Plus.get(0))
回答: > > > ``` > if(Math.abs(Plus.get(0))>Math.abs(Minus.size())) > answer =Minus.size()*-1; > ``` > > ここで`Minus.size() * -1`をanswerに放り込んでいるのが直接的原因では。 そもそも 難しく考えすぎな気もします。 ``` int n = 入力; int result = 入力; // 暫定的に『ゼロに一番近い値』とみなす。 for(n回繰り返す) { int num = 入力; numとresultの絶対値をそれぞれ計算; if(numの絶対値 < resultの絶対値) { result = num; } else if(numの絶対値 > resultの絶対値) { // 更新は不要 } else { result = numとresultのうち大きい方; } } ``` 変数名が適当ですが、悪しからず。 さらに メソッドを利用するともっと簡潔です。 ``` // 絶対値がゼロに近い方を返す。絶対値が同じ場合正の数を返す。 static int getNearlyZero(int a, int b) { aの絶対値とbの絶対値をそれぞれ計算; if(aの絶対値 < bの絶対値) return a; if(aの絶対値 > bの絶対値) return b; return aとbのうち大きい方; } public static void main(String[] args) { ... int result = ...; for(...) { int num = ...; result = getNearlyZero(result, num); } } ```