najkrótszy ciąg ArrayListy

0

Proszę o pomoc w zadaniu. Coś jest źle, ponieważ jeśli podam na początku 2znakowy string następnie 3 stringi 1znakowe i na koncu 2 znakowy to wychodzi ze najkrótszy jest ten 2 znakowy

  1. Utwórz listę ciągów.
  2. Wczytaj 5 ciągów z klawiatury i dodaj je do listy.
  3. Używając pętli, znajdź najkrótszy ciąg na liście.
  4. Wyświetl ten ciąg.
  5. Jeśli jest ich więcej, wyświetl każdy z nich w nowej linii.

Requirements:
• Zadeklaruj zmienną listy ciągów i natychmiast ją zainicjalizuj.
• Program powinien wczytać 5 ciągów z klawiatury i zapisać je do listy.
• Program powinien wyświetlać najkrótszy ciąg.
• Jeśli najkrótszych ciągów jest więcej, musisz wyświetlić każdy z nich w nowej linii.

public class Solution {
    public static void main(String[] args) throws Exception {
        ArrayList<String> strings = new ArrayList<>();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String s = "";


        for (int i = 0; i < 5; i++) {
            String readLine = bufferedReader.readLine();
            strings.add(readLine);
        }

        for (int i = 1; i < 5; i++) {
            if(strings.get(0).length() >= strings.get(i).length()) {
                 s = strings.get(i);
            }else {
                s = strings.get(0);
            }
        }

        System.out.println(s);

        for (int i = 1; i < 5; i++) {
            if (strings.get(i).length() == s.length()){
                System.out.println(strings.get(i));
            }

        }
    }
} 
0

Porownoj dlugosc z s.length()

0

To nic nie daje. Bo każdy string dodany jest dłuższy od string s. A ja mam znaleźć najkrótszy

0

Wydaje mi się, że takie dwie pętle załatwią wszystko, najpierw znalezienie minimalnego, a potem sprawdzenie, czy są jeszcze jakieś o tej [minimalnej] długości:

public class Main {
  public static void main(String[] args) throws Exception {
    ArrayList<String> strings = new ArrayList<>();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    for (int i = 0; i < 5; i++) {
      String readLine = bufferedReader.readLine();
      strings.add(readLine);
    }
    System.out.println(strings);
    int min_length = Integer.MAX_VALUE;
    int min_length_ind = 0;
    ArrayList<String> strings_min = new ArrayList<>();
    int i = 0;
    for (i = 0; i < 5; ++i) {
       if (strings.get(i).length() < min_length){
          min_length = strings.get(i).length();
          min_length_ind = i;
       }
    }
    strings_min.add(strings.get(min_length_ind));
    for (int j = 0; j < 5; ++j) {
       if (strings.get(j).length() == min_length && strings.get(j) != strings_min.get(0)){
          strings_min.add(strings.get(j));
       }
    }
    System.out.println(strings_min);
  }
}
0

niezgodne z poleceniem.. ma być 1 lista. znalezienie najkrótszego za pomocą pętli i wyświetlenie go tyle razy ile razy wsytąpił

0

Powyższy program właśnie to robi, wyświetla najkrótszy ciąg, a jesli jest więcej takich ciągów, np.: ["as", "dc", "sdf", "sdsddss", "sdf"], to wyświetla je wszystkie.

0
lion137 napisał(a):

Powyższy program właśnie to robi, wyświetla najkrótszy ciąg, a jesli jest więcej takich ciągów, np.: ["as", "dc", "sdf", "sdsddss", "sdf"], to wyświetla je wszystkie.

ale zostały użyte 2 ArrayList a może być tylko 1..

0

Ale to głupie, a czemu nie może być dwóch list, pamięci zabraknie? :-D :-D. To, nie Twórz drugiej listy, tylko stringa, Wpisz do niego wartośc, w ostatniej pętli drukuj wartości.

0

Znalezienie słowa o najkrótszej dł. wymaga przejścia po całej liście, 1 for
idąc po niej zapamiętuj obecnie najkrótszą długość stringa spośród już przejrzanych
następnie w 2-gim for możesz się już przejść przez listę sprawdzając czy min dł jest zgodna z min wcześniej wyliczoną i jednocześnie wypisując

0

Trochę modyfikując Twój kod:

public static void main(String[] args) throws IOException {
    ArrayList<String> strings = new ArrayList<>();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

    for (int i = 0; i < 5; i++) {
      String readLine = bufferedReader.readLine();
      strings.add(readLine);
    }

    int max = Integer.MAX_VALUE;
    int minValue = 0;

    for(String s : strings) {
      minValue = Math.min(max, s.length());
      max = minValue;
    }

    for (String s : strings) {
      if(s.length() == minValue) {
        System.out.println(s);
      }
    }

  }

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