Methoden Differenz berechnen

paco89

Bekanntes Mitglied
hallo,

habe folgende aufgabe versucht zu lösen:

Ihr Programm nimmt zwei Zahlen entgegen und gibt deren Differenz (größere minus kleinere Zahl) aus.

Zusatzaufgabe: Das Programm nimmt drei Zahlen entgegen und gibt die kleinste und die größte vorkommende Differenz aus.


den ersten Teil der Aufgabe habe ich mit folgendem code gelöst:

Java:
public class Differenz
{
public static int rechner(int a , int b)
{
	int res;

	if(a>b){
	res = a-b;
        }

	else{
	res = b-a;
	}
	
	return res;
}


public static void main(String [] args)
{
		int wert1, wert2;
	
	System.out.println("Bitte geben Sie eine Zahl: ");
	wert1 = Integer.parseInt(System.console().readLine());
	
	System.out.println("Bitte geben Sie eine 2. Zahl: ");
	wert2 = Integer.parseInt(System.console().readLine());
	
	int diff= rechner(wert1, wert2);
	
	System.out.println("Die Differenz der beiden Werte lautet : " + diff);
}


}


kein problem gehabt. allerdings hatte ich ein problem mit der zusatzaufgabe. dazu habe ich bis jetzt folgendes abgetippt:

Java:
// Methode nimmt 3 Zahlen entgegen und gibt die kleinste und größte vorkommende Differenz aus

public static int zusatz(int c, int d, int e)
{
	int ergebnis, zw1, zw2, zw3, zw4, zw5, zw6;
		
	if(c>d){
	zw1 = c-d;	
	}
	if(d>c){
	zw2 = d-c;
	}
	
	if(c>e){
	zw3 = c-e;	
	}
	
	if(e>c){
	zw4 = e-c;
	}
	
	if(d>e){
	zw5= d-e;
	}
	
	if(e>d){
	zw6 = e-d;
	}
	
	
	
	
}

wie ihr sehen könnt habe ich insgesamt 6 Variablen zum Zwischenspeichern der Werte bestimmt habe. allerdings habe ich so langsam den faden verloren wie es jetzt weitergehen soll. wie kann man denn die größte und kleinste vorkommende differenz ausgeben lassen? jmd. ne idee? ich wollte es zunächst mit Math.max() und Math.min() ausprobieren, aber da kann man ja nur 2 werte reinpacken.



für hilfreiche Ansätze wäre ich echt froh.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
int min = Math.min(a, Math.min(b, c));

Zusatzaufgabe Nummer 1337: Das Programm nimmt beliebig viele Zahlen entgegen (wobei die erste eingegebene Zahl angibt, wie viele Zahlen noch eingegeben werden sollen) und gibt die minimale und maximale vorkommende Differenz aus.
 

paco89

Bekanntes Mitglied
hallo,

ich habe den code jetzt überarbeitet und der sieht jetzt folgendermaßen aus:

Java:
public static int zusatz(int c, int d, int e)
{
	int ergebnis, zw1, zw2, zw3, zw4, zw5, zw6;
	int d1, d2;
		
	if(c>d){
	zw1 = c-d;	
	}
	if(d>c){
	zw2 = d-c;
	}
	
	if(c>e){
	zw3 = c-e;	
	}
	
	if(e>c){
	zw4 = e-c;
	}
	
	if(d>e){
	zw5= d-e;
	}
	
	if(e>d){
	zw6 = e-d;
	}
	
	d1 = Math.max(zw1, Math.max(zw2,zw3));
	d2 = Math.max(zw4, Math.max(zw5,zw6));
	
	if(d1>d2){
	ergebnis = d1;
	}

	else{
	ergebnis = d2;
	}
	
	return ergebnis;
	
	
}


aber jetzt kommt ne fehlermeldung, die mir sagt, dass ich die variablen zw1 - zw6 nicht initialisiert habe. aber das habe ich doch gemacht. deshalb verstehe ich nicht, was ich machen soll.
 

janus23

Mitglied
Hast du nicht.
Java:
int ergebnis, zw1 = 0, zw2 = 0, zw3 = 0, zw4 = 0, zw5 = 0, zw6 = 0;
int d1 = 0, d2 = 0;

So sind Variablen initialisiert ;)
 

tribalup

Bekanntes Mitglied
Schau dir mal das Sortieren von Listen an.

Pseudo:
x Zahlen in Liste einfügen;
Liste sortieren;
Differenz zwischen Zahl 1 und 2 in der Liste berechnen(kleinste Differenz);
Differenz zwischen erster und letzter Zahl berechnen(größte Differenz);

Zusatzeffekt-> beliebige Anzahl von Zahlen ist möglich
 
?

_-|-_

Gast
List = 1, 7, 8, 20;


d1 = 20 - 1 = 19.
größte Differenz. Passt.

d2 = 7-1 = 6.
kleinste Differenz?

Brute-Force mäßig eventuell:
Reche von allen Konstellationen die Differenz aus,
und wenn sie kleiner ist als die vorherige, speicher sie.
Code:
d2
20-8 = 12
d2 = 12
8-7 = 1
d2 = 1
7-1 = 6
d2 = 1
 

tribalup

Bekanntes Mitglied
Ops brainafk... Ist aber auch warm hier :lol:
Dann würd ichs mit verschachtelten Schleifen lösen, wobei die differenzen in einer Liste gespeichert werden. Diese wird dann am Ende sortiert.
Entspricht dann dem Brute-Force.

Grüße
 

tribalup

Bekanntes Mitglied
So nochmal anders

Java:
	public static ArrayList zusatz(int c, int d, int e) {
		int maxDiff, minDiff;
		ArrayList erg = new ArrayList(),zahlen = new ArrayList();
		zahlen.add(c);
		zahlen.add(d);
		zahlen.add(e);
		Collections.sort(zahlen);

		maxDiff = (int) zahlen.get(zahlen.size() - 1) - (int) zahlen.get(0);

		if ((int) zahlen.get(1) - (int) zahlen.get(0) < (int) zahlen.get(2) - (int) zahlen.get(1)) {
			minDiff = (int) zahlen.get(1) - (int) zahlen.get(0);
		} else {
			minDiff = (int) zahlen.get(2) - (int) zahlen.get(1);
		}

		erg.add(minDiff);
		erg.add(maxDiff);
		return erg;

	}

Das Ganze kann so mit einer beliebigen Anzahl von Zahlen genutzt werden.

Grüße
 
H

hüteüberhüte

Gast
Hier die Holzhammermethode:
Java:
    public static int diff(int x, int y) {
        return x < y ? y - x : x - y;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Integer> ints = new ArrayList<Integer>();
        System.out.print("Zahlen eingeben: ");
        for (String s : reader.readLine().split("\\D+")) {
            try {
                ints.add(Integer.parseInt(s));
            } catch (NumberFormatException nfe) {
            }
        }
        ArrayList<Integer[]> diffs = new ArrayList<Integer[]>();
        for (int i = 0; i < ints.size() - 1; i++) {
            for (int j = i + 1; j < ints.size(); j++) {
                diffs.add(new Integer[]{ints.get(i), ints.get(j), diff(ints.get(i), ints.get(j))});
            }
        }
        Collections.sort(diffs, new Comparator<Integer[]>() {

            public int compare(Integer[] o1, Integer[] o2) {
                return o1[2].compareTo(o2[2]);
            }
        });
        for (Integer[] array : diffs) {
            System.out.println(Arrays.toString(array));
        }
    }

Ausgabe:
Code:
Zahlen eingeben: 1 2 3
[1, 2, 1]
[2, 3, 1]
[1, 3, 2]

Zahlen eingeben: 1 2 3 4 5
[1, 2, 1]
[2, 3, 1]
[3, 4, 1]
[4, 5, 1]
[1, 3, 2]
[2, 4, 2]
[3, 5, 2]
[1, 4, 3]
[2, 5, 3]
[1, 5, 4]
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben