---
# System prepended metadata

title: Java_Cmoney_ft9108_找出連續正整數_改2
tags: [Cmoney_Java題目]

---

---
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;
    }
}
```

