scanline-algorithmus
lima-city → Forum → Programmiersprachen → Java
algorithmus
anzahl
bezeichnung
code
datei
datum
eingabe
einlesen
grund
import
index
letzten element
maximale summe
paste
programm
scanner
system
tun
update
zeiger
-
import java.util.Scanner; class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); int testinstanzen = in.nextInt(); for (int i = 1; i <= testinstanzen; i++) { int n = in.nextInt(); //anzahl datenpunkte int[] datenpunkte = new int[n]; //einlesen for (int j = 0; j < n; j++) { datenpunkte[j] = in.nextInt(); } System.out.println(scan_line(datenpunkte)); } } //scan-line algorithm public static int scan_line(int[] datenpunkte){ int actualmax = 0; int index = 0; int scanmax=0; boolean exhausted = false; while(!exhausted){ if (scanmax + datenpunkte[index+1] > 0) { scanmax = scanmax + datenpunkte[index+1]; } else{ scanmax = 0; } //update actualmax actualmax = Math.max(actualmax, scanmax); index=index+1; //wenn der zeiger auf dem letzten element steht, so muss abgebrochen werden if (index+1 == datenpunkte.length) { exhausted = true; } } return actualmax; } }
Eingabe in der console(copy paste)
2
32 -2 4 4 0 -1 5 -3 2 -2 -5 4 -12 1 -6 1 2 8 -1 3 -4 -2 -5 2 -5 2 -1 1 4 -2 6 2 -4
10 -5 -1 -4 -2 -2 -9 -10 -2 -3 -4
warum terminiert dieser algorithmus erst, nachdem ich noch enter drücke?
ich versteh die welt nicht mehr!!!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mir ist nicht ganz klar, was der Code tun soll. Die Bezeichnung scan_line() ist dabei auch nicht gerade aufschlussreich.
Aber ich habe festgestellt, dass wenn du den Zeilenumbruch nach deiner 2 weglässt, musst du nicht nochmal Enter drücken.
Also hast du die Eingabe
2 32 -2 4 4 0 -1 5 -3 2 -2 -5 4 -12 1 -6 1 2 8 -1 3 -4 -2 -5 2 -5 2 -1 1 4 -2 6 2 -4 10 -5 -1 -4 -2 -2 -9 -10 -2 -3 -4
-
Hallo nicolas-k,
ich konnte jetzt keine ungewöhnliches Verhalten feststellen.
Du hast 3 Eingabezeilen und musst folglich auch dreimal Enter drücken. Der Grund ist, dass Du eine Eingabezeile ja solange editieren kannst solange nicht Enter gedrückt wurde. Erst wenn man Enter drückt gilt die Eingabe als abgeschlossen und der Eingabepuffer wird geflusht so dass die Eingabe dem Programm zur Verfügung steht.
Wenn Du die Daten aus einer Datei einliest wäre das anders. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage