--- tags: Cmoney_Java題目 --- Java_Cmoney_ft9108_找出連續正整數_改2 === ==如果有一樣長的數字也要輸出 -1 , 另外會直接輸入數列並以逗點分隔, 例如" 1 , -2, 3, 5 "== ![](https://i.imgur.com/jrjGNkZ.png) 1.主程式 --- 使用迴圈找最長正整數序列 1. 先用巢狀迴圈和 2D ArrayList ,將所有數列讀進去 2. 創造一個 class PosiIntSeq 來記錄每個數列的長度和總和 3. implements Comparable 來排序物件([詳情](https://hackmd.io/@jason60810/Hyyq7iAAd)) 4. 利用 `ArrayList<PosiIntSeq> result` 記錄所有的數列物件,如果最後一個的長度和倒數第二個的長度一樣,代表最長的長度出現兩次以上 ```java= import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class test05 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); /* Split String */ String[] strSplit = str.split(","); /* String[] to int[] */ int[] numbers = new int[strSplit.length]; for (int i = 0; i < strSplit.length; i++) { numbers[i] = Integer.valueOf(strSplit[i]); } /* put int[] into 2D ArrayList */ ArrayList<ArrayList<Integer>> posiInts = new ArrayList<>(); for (int i = 0; i < numbers.length; i++) { ArrayList<Integer> posiInt = new ArrayList<>(); for (int j = i; j < numbers.length; j++) { if (numbers[j] > 0) { posiInt.add(numbers[j]); if (j == numbers.length - 1) i = j; } else { i = j; break; } } posiInts.add(posiInt); } /* calculate each sequence's length and sum */ ArrayList<PosiIntSeq> result = new ArrayList<>(); for (int i = 0; i < posiInts.size(); i++) { result.add(new PosiIntSeq(posiInts.get(i))); } /* sort */ Collections.sort(result, Collections.reverseOrder()); /*for (int i = 0; i < posiInts.size(); i++) { result.get(i).print(); }*/ /* print result */ if (result.size() == 1) System.out.println(-1); else if (result.get(0).howLong == result.get(1).howLong) System.out.println(-1); else System.out.println(result.get(0).sum); } } class PosiIntSeq implements Comparable<PosiIntSeq> { ArrayList<Integer> posiInt; int howLong; int sum; PosiIntSeq(ArrayList<Integer> posiInt) { this.howLong = posiInt.size(); this.sum = sum(posiInt); } int sum(ArrayList<Integer> posiInt) { int sum = 0; for (int i : posiInt) { sum += i; } return sum; } void print() { System.out.println(this.howLong + " " + this.sum); } @Override public int compareTo(PosiIntSeq posiInt) { return this.howLong - posiInt.howLong; } } ```