Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Abstand zum Durchschnitt von 5 Zahlen berechnen...
... und die Zahl mit dem geringsten Abstand ausgeben.
Java:
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
int[] array = new int[5];
int zahl = scanner.nextInt();
int zahl1 = scanner.nextInt();
int zahl2 = scanner.nextInt();
int zahl3 = scanner.nextInt();
int zahl4 = scanner.nextInt();
array[0] = zahl;
array[1] = zahl1;
array[2] = zahl2;
array[3] = zahl3;
array[4] = zahl4;
double durchschnitt = berechneDurchschnitt(array);
System.out.println(durchschnitt);
int minimumZahl = berechneAbstand(durchschnitt, array);
System.out.println(minimumZahl);
scanner.close();
}
public static double berechneDurchschnitt(int[] array) {
double durchschnitt = 0;
int summe = 0;
int zaehler = 0;
for (int i = 0; i < array.length; i++) {
summe += array[i];
zaehler++;
}
durchschnitt = summe / zaehler;
return durchschnitt;
}
//HIER!
public static int berechneAbstand(double durchschnitt, int[] array) {
int counter = 0;
int minimum = 0;
int bisherigeZahl = 0;
for (int i = 0; i < array.length; i++) {
if (durchschnitt <= i) {
for (double j = durchschnitt; j <= i; j++) {
counter++;
}
if (minimum > counter) {
minimum = counter;
bisherigeZahl = i;
}
} else if (durchschnitt > i) {
for (double j = i; j <= durchschnitt; j++) {
counter++;
}
if (minimum > counter) {
minimum = counter;
bisherigeZahl = i;
}
}
}
return bisherigeZahl;
}
}
Hier berechne ich den Durchschnitt eines Arrays, aber der Part, wo ich nicht weiterkomme, ist die berechneAbstand Methode... Dort wird immer 0 ausgegeben, wieso?
Es geht nicht um die Parameter, sondern darum, was IN der Methode steht. Zeig mal die Stelle in berechneAbstand, wo Du eines der Elemente des Arrays verwendest.
Zu jeder Zeit gilt counter >= 0. Dein minimum ist zu Beginn 0. Folglich kann der Fall minimum > counter niemals eintreten.
Damit reduziert sich Dein Code zunächst zu:
Java:
public static int berechneAbstand(double durchschnitt, int[] array) {
int counter = 0;
int bisherigeZahl = 0;
for (int i = 0; i < array.length; i++) {
if (durchschnitt <= array[i]) {
for (double j = durchschnitt; j <= array[i]; j++) {
counter++;
}
} else if (durchschnitt > array[i]) {
for (double j = array[i]; j <= durchschnitt; j++) {
counter++;
}
}
}
return bisherigeZahl;
}
Da der counter nur noch hochzählt, aber sonst nirgends verwendet wird, weiter zu:
Java:
public static int berechneAbstand(double durchschnitt, int[] array) {
int bisherigeZahl = 0;
for (int i = 0; i < array.length; i++) {
}
return bisherigeZahl;
}
Und letztlich zu
Java:
public static int berechneAbstand(double durchschnitt, int[] array) {
return 0;
}
Du möchtest unter allen Zahlen eines Arrays diejenige ermitteln, die den kleinsten Abstand zu einem gegebenen Wert w hat.
Dann kannst Du drei Fälle unterscheiden:
wenn das Array leer ist, dann gibt es keine Zahl aus dem Array mit minimalem Abstand zu w.
wenn das Array aus einem Element besteht, dann ist dieses Element die Zahl mit dem minimalen Abstand zu w.
wenn das Array aus weiteren Elementen besteht, dann kann sich unter diesen eine Zahl befinden, deren Abstand zu w kleiner ist als der Abstand des ersten Elements zu w.
Daraus lässt sich unmittelbar ein Algorithmus ableiten:
Code:
IF array leer THEN FEHLER // Fall 1
minAbstand := abstand(array[0], w)
minZahl := array[0]
FOR i := 1 .. array.length-1
aktAbstand := abstand(array[i], w);
IF aktAbstand < minAbstand THEN
minAbstand := aktAbstand;
minZahl := array[i];
END IF
NEXT
RETURN minZahl;
Wie Du den Abstand ermittelst, ist eine andere Frage. Math.abs ist eine Möglichkeit, der ternäre Operator (und damit if) eine andere, außerdem spielt es für die Ermittlung des minimalen Abstands keine Rolle, ob Du den einfachen oder den quadratischen Abstand verwendest.