2017-07-08 7 views
0

Ich versuche, mein Array zu durchlaufen, um den Maximalwert zu finden und den Wert zu drucken. Auf der Konsole wird jedoch nichts gedruckt. Können Sie sich bitte meinen Code unten ansehen, um zu sehen, was ich falsch gemacht habe?Maximaler Wert des Arrays finden

for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user 
    array[c] = in.nextInt(); 

maxInt = array[0]; 
minInt = array[0]; 

for (c = 0; c < n; c++) { 
    if (array[c] > maxInt) { 
     maxInt = array[c]; 
    } 
    else { 
     break; 
    } 
} 
System.out.println("Max int is: " + maxInt); 
} 

EDIT:

Voll Klasse:

import java.util.Scanner; 

public class MaxMinOfArray { 
public static void main(String[] args) { 
int c, n, search, array[]; 
int maxInt, minInt; 

Scanner in = new Scanner(System.in); 
System.out.println("Enter number of elements"); 
n = in.nextInt(); //asks user to specify array size 
array = new int[n]; //creates array of specified array size 

System.out.println("Enter " + n + " integers"); 

for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user 
array[c] = in.nextInt(); 

maxInt = array[0]; 
minInt = array[0]; 

for (c = 1; c < n; c++) { 
if (array[c] > maxInt) { 
    maxInt = array[c]; 
} 
} 
System.out.println("Max int is: " + maxInt); 
} 
} 
+0

Es funktioniert für mich. Wie läuft es - über eine IDE, Linux-Shell, Windows-Eingabeaufforderung,? – ajb

Antwort

3

Entfernen:

else { 
     break; 
    } 

und starten von c=1

+0

Ich habe das gemacht, aber nichts druckt noch. – Spartan123

+0

Ist Ihr Scanner richtig definiert? –

+0

@ Spartan123 Das ist seltsam, weil es perfekt funktioniert Überprüfen Sie dies: https: //ideone.com/PqF8vW ... –

1

Wie andere schon angedeutet, wollen Sie nicht

else { 
    break; 
} 

, das zu tun bedeutet, dass es so bald Looping stoppen würde, da es eine Reihe findet, die nicht größer ist als der Strom max. Da du mit dem ersten Punkt in der Liste beginnst, der trivialerweise nicht größer ist als du selbst, break sofort.

Auch wenn Sie es geändert haben, um bei c = 1 zu starten, ist der einzige Fall, in dem dieser Code möglicherweise wie geschrieben funktioniert, wenn der Benutzer Zahlen in aufsteigender Reihenfolge eingegeben hat. (In diesem Fall wäre eine lineare Suche wie diese sowieso sinnlos, da Sie buchstäblich nur das letzte Element im Array finden und wissen, dass es das größte Element ist).

Außerdem sollten Sie überprüfen, ob array[c] kleiner als der aktuelle Mindestwert in Ihrer for Schleife ist; Es gibt keinen Grund, dies in einer separaten Schleife zu tun.

Denken Sie daran, wenn Sie eine lineare Suche nach dem Maximalwert eines unsortierten Arrays durchführen, müssen Sie immer durch das gesamte Array gehen, um sicherzustellen, dass Sie keinen größeren Wert verpassen. Wenn Sie beispielsweise nur die Hälfte des Arrays durchsuchen, wissen Sie, dass die Hälfte, die Sie nicht gesucht haben, nicht den Maximalwert enthält.

+0

Hallo, es ist immer noch nicht in der Klasse drucken, ich habe das OP bearbeitet, um den vollen Klassencode hinzuzufügen. Bitte schau es dir an. – Spartan123

1

Entfernen Sie diesen Teil des Codes.

else { 
    break; 
} 

Denn wenn c==0 in dieser Zeit array[c] == maxInt. So geht es zum anderen Teil und breche deine for Schleife.

+0

Hallo, es druckt immer noch nicht in der Klasse, ich habe das OP bearbeitet, um den vollen Klassencode hinzuzufügen. Bitte schau es dir an. – Spartan123

0

Ihre zweite Schleife vergleicht für jedes Element in array wenn er größer als maxInt, aber maxInt hat gerade auf das erste Element der array eingestellt. Dies schlägt die Bedingung bei der ersten Iteration der Schleife fehl und führt break in dem Else-Block aus, der die Schleife beendet.

die else Block behebt dieses herausnehmen:

for (c = 0; c < n; ++c) 
{ 
    if (array[c] > maxInt) 
     maxInt = array[c]; 
} 

Oder alternativ:

for (c = 0; c < n; ++c) 
    maxInt = Math.max(maxInt, array[c]); 

Wie für die Konsolenmeldung nicht angezeigt, vergewissern Sie sich, indem Sie einen Haltepunkt ordnungsgemäß ausgeführt wird, der Code und Schritt durch den Code (hängt von der IDE ab, die Sie verwenden).

Verwandte Themen