前提・実現したいこと
Javaの学習をしており練習に以下のようなプログラムを作成しようとしています
1.入力した値を比較し最もゼロに近く値を出力する
2.正と負の値で絶対値が同じ場合(2とー2など)、正の値を出力する
発生している問題・エラーメッセージ
期待通りの出力ではなく、入力していない[-1]が出力される場合がある
入力した正負の値を一度絶対値にしてから比較してより0に近いものを出力しようとしているのですが
入力した数字によって正しい出力が得られる場合と、そうでない場合が発生しています。
例えば、
入力回数: 3
入力: 3,-2,2,3
とした場合、出力が[-1]となってしまいます
しかし
入力回数: 3
入力: 3,-2,2,1
とした場合であれば、期待通り[1]が出力されます
該当のソースコード
Java
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Temperatures { public static void main(String args[]) { Scanner in = new Scanner(System.in); int n = in.nextInt(); // the number of temperatures to analyse List<Integer> Minus = new ArrayList<>(); List<Integer> Plus = new ArrayList<>(); int answer =0; for (int i = 0; i < n; i++) { int t = 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))<Math.abs(Minus.size())) answer =Plus.get(0); else if(Math.abs(Plus.get(0))==Math.abs(Minus.size())) answer =Plus.get(0); } System.out.println(answer);//出力が-1になる } }
この問題の発生理由と解決策を教えていただけませんか?
宜しくお願いします

回答6件
あなたの回答
tips
プレビュー