• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java wyszukiwanie największego rosnącego podciągu

VPS Starter Arubacloud
0 głosów
453 wizyt
pytanie zadane 17 stycznia 2018 w Java przez Patryk Kirszenstein Bywalec (2,400 p.)

Witam serdecznie otóż nie wiem jak zrobić pewne zadanie. Nauczyłem się już wpisywania  rozdzielonych wartości z plików do tablic wielowymiarowych więc już jest sukces ale co do algorytmu to nie mam za cholerę pojęcia jak to zrobić więc proszę o pomoc :) 

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.StringTokenizer;

public class czytanie {

	public static void main(String[] args) {
		double [ ] [ ] numbers = new double [ 101] [101];
		   int column=0,row=0;
		
		
		 try {
	            System.out.print("Enter the file name with extension : ");

	            Scanner input = new Scanner(System.in);

	            File file = new File(input.nextLine());

	            input = new Scanner(file);
	     
	            for(int columns = 0;columns < 101;columns++){
	            	String input2 = input.nextLine();
	            	    StringTokenizer strToken = new StringTokenizer(input2);
	    	            int count = strToken.countTokens();
	            
	            for(int rows = 0;rows < count;rows++){
	            	numbers[columns][rows] = Integer.parseInt((String)strToken.nextElement());
	            	System.out.println(numbers[columns][rows]);
	            }    }
	            


	                input.close();

	        } catch (Exception ex) {
	            ex.printStackTrace();
	        }
		 
		 
		 
		 
	    }}

1 odpowiedź

+1 głos
odpowiedź 17 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)

1) Plik wczytujesz przy użyciu Files.readLines() do List<String> 

2)  Tworzysz tablicę int[] results w której będziesz trzymał wyniki. Możesz też bezpośrednio do pliku zapisywać jak chcesz

3) Iterujesz po wczytanej liście Stringów z zawartością pliku(pierwszą linie pomijasz). Kolejne linie możesz parsować w ten sposób:

int numbers = Arrays.stream(line.split("\\s+")).mapToInt(Integer::parseInt).skip(1).toArray();

Od razu możesz przystąpić do iteracji po utworzonej tablicy,

4) Podciąg wyznaczasz w ten sposób, że wykonujesz porównanie elementów parami jeżeli następny element jest większy od poprzedniego to zwiększasz licznik, a jeżeli nie to zerujesz. Potrzebujesz drugą zmienną w której będziesz przechowywał maksymalną długość podciągu. Jeżeli aktualny podciąg jest większy od maksymalnego to on staje się maksymalnym. Po zakończeniu iterowaniu po tej tablicy wynik umieszczasz w tablicy results[] lub od razu w pliku.

 

Ogólnie to polecam Ci to zadanie najpierw poćwiczyć w ten sposób, że zdefiniujesz sobie zmienną String, która będzie przykładową linią pliku i spróbuj to zrobić pomijając to wczytywanie z pliku i zapisywanie do niego. Jak Ci zadziała to wtedy próbuj na pliku.

 

komentarz 17 stycznia 2018 przez Patryk Kirszenstein Bywalec (2,400 p.)
Dlaczego do List<strings> ?
komentarz 17 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Możesz do Stream<String> jak wolisz od tego jest Files.lines(). Najbardziej przejrzysty sposób odczytywania danych z plików wszystko w 1 linii, ale możesz tego Scannera też zostawić do odczytu i przejść do punktu 2)

Podobne pytania

0 głosów
3 odpowiedzi 365 wizyt
pytanie zadane 25 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 28 marca 2019 w Java przez pionas0407 Gaduła (4,620 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...