Indexy w ArrayList

0

Hej mam takie zadanko

Napisać program, który z pliku c:\Temp\tab.txt wczytuje liczby całkowite i tworzy tablicę, zawierającą te liczby . W tak zainicjowanej tablicy program znajduje wartość maksymalną oraz wszystkie indeksy w tablicy gdzie taka wartość się znajduje.

Program wypisuje na konsolę:

w pierwszym wierszu - wszystkie elementy tablicy, rozdzielone spacjami w drugim wierszu - wartość maksymalną, w trzecim wierszu - indeksy tablicy gdzie ta wartość się znajduje.

Przykładowo, jeśli plik c:\Temp\tab.txt zawiera:
1 5 5 3
-1 2 5 4
to na konsoli otrzymujemy:
1 5 5 3 -1 2 5 4
5
1 2 6

I mam problem z wyświetleniem indexów gdzie znajduje się największa wartość szczególnie że lista jest już posortowana.

ArrayList<Integer> lista = new ArrayList<Integer>();
        Scanner odczyt = new Scanner(new File("C:/Temp/Liczby.txt"));
        while(odczyt.hasNextLine()){
            Integer liczby = new Integer(odczyt.nextInt());
            lista.add(liczby);
        }
        for(int x : lista){
            System.out.print(x + " ");
        }
        
        System.out.println();    
        
        Collections.sort(lista);
        System.out.println(lista.get(lista.size()-1));
2

No jak ją sobie posortujesz to będzie to trochę bez sensu ;) Domyślam się że w zadaniu chodzi jednak o wybranie maxa z tablicy:
Collections.max(list)
A następnie przeleceniu pętlą po tablicy i wypisaniu indeksów jesli dany element tablicy jest równy maxowi.

0

Mniej więcej coś takiego:

public class LiczbyZPlikuTest {
    public static void main(String[] args)
            throws FileNotFoundException {

        List<Integer> lista = new ArrayList<Integer>();
        Scanner odczyt = new Scanner(new File("C:/Temp/Liczby.txt"));

        // wczytywanie elementów
        while(odczyt.hasNextLine()){
            int liczba = odczyt.nextInt();
            lista.add(liczba);
        }

        // wypisywanie elementów
        for(int x : lista){
            System.out.print(x + " ");
        }

        System.out.println();

        Integer max = Collections.max(lista);
        System.out.println(max);
        
        int i = 0;
        for (Integer liczba : lista) {
            if (liczba.equals(max)) {
                System.out.print(i + " ");
            }
            i++;
        }
    }
}
0

@bakeraw2,

for (Integer liczba : lista) {
    if (liczba.equals(max)) {
        System.out.print(i + " ");
    }
    i++;
}
for(Integer liczba : lista)
    if(liczba.equals(max))
        System.out.print(i++ + " ");

Czytelne? Rozlazłe raczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1