2017-03-03 9 views
-2

Ich habe eine Methode, die den kleinsten Wert eines Arrays zurückgeben soll. Das Array befindet sich im Parameter der Methode, also geben Sie die Werte Ihrer Wahl ein, wenn Sie ein Objekt der Klasse erstellen. Dies ist die Methode, die ich mit so weit gekommen sind:Rückgabe des kleinsten Wertes eines Arrays

public class minsteNummer { 

public minsteNummer() { 
} 

public int minsteNummer(Integer[] nummer) { 
    int minste = 0; 

    for(int i = 0; i< nummer.length; i++){ 
     if(nummer[i] <= nummer.length) { 
      minste = i; 
      System.out.println("Minste nummer er " + minste); 
     } else if(nummer.length == 0) { 
      return 0; 
     } 
    } 
    return 0; 
} 
} 

Es ist nicht so, wie ich es will nicht ausführt, und ich kann nicht herausfinden, was exacly es druckt, aber es ist auf jeden Fall nicht die kleinste Zahl der Array. Ich habe es mit einer while-Schleife versucht, aber das funktioniert auch nicht.

Weiß jemand, wo der Fehler im Code ist, und wie man es verbessert? Ich möchte auch, dass ich nur die kleinste Zahl zurückgebe, nicht drucke, aber wenn ich versuche, "Return minste" zu setzen; In der if-Anweisung heißt es "unerwarteter Rückgabewert".

Vielen Dank im Voraus.

Antwort

0
public int minsteNummer(Integer[] nummer) { 
    int minste = Integer.MAX_VALUE; 

    for(int i = 0; i< nummer.length; i++){ 
    if(nummer[i] < minste) { 
     minste = nummer[i] ; 
    } 
    if(minste != Integer.MAX_VALUE) 
     return minste; 
    else 
     return 0; 
} 
+0

Pls Ihre Antwort bearbeiten und die Formatierung beheben. – clearlight

2

Es gibt wenige Orte in Ihrem Code, die Aufmerksamkeit brauchen:

  • Als Methode Anwendungsbereich ist public sollten Sie immer für ungültige Eingaben überprüfen

  • Sollte zuordnen nicht: int minste = 0; da konnte eine negative Zahl in einem gegebenen Array sein

  • Wenn Mindestnummer zuweisen, sollte immer compa re es in die Schleife aktuelle Anzahl

    if (minste > nummer[i]) minste = nummer[i];

  • schließlich immer wieder zurückkehren Ihre Mindestzahl return minste;

Alle zusammen:

public static int minsteNummer(Integer[] nummer) { 
    if (nummer==null || nummer.length == 0) { 
    throw new IllegalArgumentException("Bad or empty array"); 
    } 
    int minste = nummer[0]; 

    for (int i = 1; i< nummer.length; i++){ 
    if (minste > nummer[i]) minste = nummer[i]; 
    } 
    System.out.println("Minste nummer er " + minste); 
    return minste; 
} 

Es lohnt sich zu erwähnen, dass Sie nutzen könnten Java-built-in Funktionalität für solch eine grundlegende Aufgabe, dh Sortierung Array in aufsteigender Reihenfolge und erste Element erhalten:

public static int minsteNummer(Integer[] nummer) { 
    if (nummer==null || nummer.length == 0) { 
    throw new IllegalArgumentException("Bad or empty array"); 
    } 
    Arrays.sort(nummer); 
    return nummer[0]; 
} 
+0

Ich füge nur hinzu, dass die Sortierlösung, obwohl sauberer, weniger effizient ist. Ob es Merge-Sort oder Quick-Sort ist (siehe [Warum Java-Arrays zwei verschiedene Sortieralgorithmen für unterschiedliche Typen verwenden?] (Http://stackoverflow.com/questions/3707190/why-java-arrays-use-two-different-sort) -Algorithmen-für-verschiedene-Typen)), das Iterieren durch das Array ist definitiv der effizientere Weg. –

+0

@JustinHellreich Stimmen Sie völlig zu, Sortieren Array ist weniger effizient als nur einen Durchlauf darüber. Aber es war nur ein Beispiel, um mehr Interesse am Thema Java 'Collections' zu erfahren – MaxZoom

1

Verwendung Ströme

Integer[] arrayB = null; 
OptionalInt min = Arrays.stream(arrayB).mapToInt(Integer::intValue).min(); 
Verwandte Themen