Erste Schritte Bin ein Programm am schreiben klappt aber nicht und weis nicht warum

Jeanpierre

Mitglied
Hey habe grade mit meinem Techniker angefangen und wir müssen ein wenig java programmieren habe diese Programm geschrieben aber er gibt nur mist aus vlt kann mir mal einer Helfen. Es soll eine Waage werden a ist das aufgelegte Gewicht. Die Waage soll mit einer schrittweisen Annäherung funktionieren also erst 1000g auflegen dan die hälfte usw halt in der while Schleife. Sie soll eine Toleranz von 2g haben deswegen a-b < 2


Java:
public class Waage {

	
	public static void main(String[] args) {

		double a;
		double b = 1000;

		Scanner scan = new Scanner(System.in);

		System.out.println("Gewicht der Äpfel =");
		a = scan.nextDouble();
		while (a - b < 2) {
			
			if (a < b) {
				b = b - b;
				b = b + b / 2;

			} else {
				b = b + b / 2;
				System.out.println("Gelegtes Gewicht " + b + "Kg");

			}

		}

	}
}
 
Die erste Frage, die bei solch einem Post immer kommt: "Was geht denn nicht?" Sowas wie: "Das Programm gibt x,y,z aus erwarten tue ich aber a,b,c" oder "Es fliegt an Zeile x eine Exception Y." wären ganz hilfreiche Infos für die Fehlersuche.

Ohne den Ablauf des Programms nachvollzogen zu haben, sind folgende zwei Zeilen sicher nicht richtig:
[JAVA=16]
b = b - b;
b = b + b / 2;
[/code]
Mit Zeile 16 setzt Du b nämlich auf 0 (b-b ergibt immer 0). In Zeile 17 rechnest Du dann 0 + (0/2), was wieder 0 ist. Das sieht nicht sinnvoll aus.
 
Zuletzt bearbeitet von einem Moderator:
Um
Code:
a
Gramm aufzuwiegen, müssen doch
Code:
a
Gramm gelegt werden? Was wiegen denn die Gewichte im Einzelnen?
 
So hab das Programm jetzt noch was verändert. Ich wusste nicht wie ich das anders ausdrücken soll als b-b ich hab das jetzt mal in 0 geändert. Die Gewichte betragen immer die hälfte also 1000g/2= 500 500/2=250 usw. Wenn ich jetzt ein Gewicht über 1000g angebe schreibt der gelegtes Gewicht 1000g und wenn ich z.b. 874 eingebe schreibt er : Gelegtes Gewicht 500.0g

Java:
package Gleichstrom;

import java.util.Scanner;

public class Waage {

	
	public static void main(String[] args) {

		double a;
		double b = 1000;
		Scanner scan = new Scanner(System.in);

		System.out.println("Gewicht der Äpfel =");
		a = scan.nextDouble();
		while (a - b < 2) {
			
			if (a < b) {
				b = 0 + b / 2;

			} else {
				b = b + b / 2;}}
				System.out.println("Gelegtes Gewicht " + b + "g");

			

		

	}
}
 
Ich wusste nicht wie ich das anders ausdrücken soll als b-b ich hab das jetzt mal in 0 geändert.
Wie wärs mit:
[JAVA=19]
b = b / 2;
[/code]
Wenn ich jetzt ein Gewicht über 1000g angebe schreibt der gelegtes Gewicht 1000g und wenn ich z.b. 874 eingebe schreibt er : Gelegtes Gewicht 500.0g
Und, was hättest du gerne? Fehlerbeschreibung immer: Erwartetes Verhalten versus tatsächliches Verhalten. Dann kann man helfen
 
Java:
        double a = Math.random() * 1000d;
        double b = 1000d;
        double c = 0;

        while (b > 2) {
            if (c + b <= a) {
                c += b;
                System.out.println("Lege " + b);
            } else {
                c -= b;
                System.out.println("Nehme " + b);
            }
            b /= 2;
            System.out.println("a = " + a);
            System.out.println("c = " + c);
        }

Das ist total sinnfrei, hält aber wenigstens immer an ^^
 
Na wenn jetzt sowieso schon jeder seinen Code postet 😉

Java:
import java.util.Scanner;

public class Waage {
 
    public static void main(String[] args) {
 
        double a;
        double b = 1000;
 
        Scanner scan = new Scanner(System.in);
 
        System.out.println("Gewicht der Äpfel = ");
        a = scan.nextDouble();
        
        System.out.println("Gelegtes Gewicht: " + b + " g");
        while (Math.abs(a-b) > 2){
            if (a < b) {
                b *= 0.5;
                System.out.println("Gelegtes Gewicht: " + b + " g");
            } else {
                b *= 1.5;
                System.out.println("Gelegtes Gewicht: " + b + " g");
            }
        }
 
    }
}

Der gibt bei der Eingabe
Code:
23
z.B. aus:

Code:
Gewicht der Äpfel =
23
Gelegtes Gewicht: 1000.0 g
Gelegtes Gewicht: 500.0 g
Gelegtes Gewicht: 250.0 g
Gelegtes Gewicht: 125.0 g
Gelegtes Gewicht: 62.5 g
Gelegtes Gewicht: 31.25 g
Gelegtes Gewicht: 15.625 g
Gelegtes Gewicht: 23.4375 g

....er nimmt also großen Aufwand auf sich, um die Äpfel zu wiegen 😀
 
Zuletzt bearbeitet:
Ich hätte halt gern das wenn ich 1541g angebe der mir 1539,0625g ausgibt.
Java:
        double a = 1541d;
        double b = 1000d;
        double c = 0;

        while (b > 2) {
            if (c + b > a) {
                b /= 2;
            } else {
                System.out.println("Lege b = " + b);
                c += b;
                System.out.println("a = " + a);
                System.out.println("c = " + c);
            }
        }
Code:
Lege b = 1000.0
a = 1541.0
c = 1000.0
Lege b = 500.0
a = 1541.0
c = 1500.0
Lege b = 31.25
a = 1541.0
c = 1531.25
Lege b = 7.8125
a = 1541.0
c = 1539.0625
Gibt 1539,0625 aus und hält wenn auch schwer zu beweisen immer an

Btw: Wie schwer ist das kleinste Gewicht?
 
Wie, ich lege erst 1000g auf und viertel das 1000g-Stück dann, um 750g zu erhalten? 😀

Ja sicher 😉
Ich dachte er will immer anzeigen lassen, wie groß das aufgelegte Gegengewicht grad ist.
Hab meinem Code oben mal noch ein sysout hinzugefügt, der das noch deutlicher macht.
Jetzt ist das Beispiel auch hübscher.

Ach: Hält übrigens auch immer an 😉 Ist das seit neustem was Tolles?
Dann bin ich der King: Meine while-Schleifen halten immer an 😀

[EDIT]
Jeanpierre hat gesagt.:
das kleinste gewicht ist 1,953125g ja aber es soll ja auch für jedes andere Gewicht unter 2000g funktionieren

Tuts doch.
[/EDIT]
 
ne wenn de halt über 1000g bist bleibt das 1000g gewicht sonst wird das weggenommen und man nimmt das nächst kleinere also das 500g gewicht

Und genau das passiert doch:

Code:
Gewicht der Äpfel =
23
Gelegtes Gewicht: 1000.0 g
Gelegtes Gewicht: 500.0 g
Gelegtes Gewicht: 250.0 g
Gelegtes Gewicht: 125.0 g
Gelegtes Gewicht: 62.5 g
Gelegtes Gewicht: 31.25 g
Gelegtes Gewicht: 15.625 g
Gelegtes Gewicht: 23.4375 g
 
ne er soll nur am ende anzeigent wie groß das gewicht der "äpfel" ist auf 2g genau

Ist doch das selbe:

Java:
import java.util.Scanner;

public class Waage {
 
    public static void main(String[] args) {
 
        double a;
        double b = 1000;
 
        Scanner scan = new Scanner(System.in);
 
        System.out.println("Gewicht der Äpfel =");
        a = scan.nextDouble();
        
        while (Math.abs(a-b) > 2){
            if (a < b) {
                b *= 0.5;
            } else {
                b *= 1.5;
            }
        }
        System.out.println("Gelegtes Gewicht: " + b);
    }
}


Gibt:
Code:
Gewicht der Äpfel =
23
Gelegtes Gewicht: 23.4375
 
Super danke schonmal noch paar dumme fragen ^^ : Warum hast du Math abs geschrieben was heist das ? und warum b*=1,5 müsste das nicht b=b*1,5 heißen ?
 
Math.abs() gibt den positiven absoluten wert des parameters an -> DOC !

b*=1.5 == b=b*1.5 -> short-ops -> AUCH DOC !
 
Super danke schonmal noch paar dumme fragen ^^ : Warum hast du Math abs geschrieben was heist das ? und warum b*=1,5 müsste das nicht b=b*1,5 heißen ?

Also
Code:
Math.abs(-2)
wär z.B. 2.
Er gibt dir also immer die Zahl ohne Vorzeichen (Betrag) aus.

und

Code:
b *= 1,5
ist das selbe wie
Code:
b = b*1,5
😉


Genauso ist es mit
Code:
x = x + 2
und
Code:
x += 2
usw.
 

Zurück
Oben