+ cannot be applied

KingOfExceptions

Bekanntes Mitglied
hallo,

ich hab ein kleines problem bei meinem folgendem programm:

Java:
 import java.util.Scanner;
class Delikatessen
{
public static void main (String [] args)
{
Scanner scan= new Scanner (System.in);
long versandkosten;
final boolean EXPRESSVERSANDKOSTEN;
long preis;
int artikel;
boolean J;
boolean versandkosten2;

System.out.println ("Geben Sie den Artikel ein: ");
artikel = scan.nextInt();

System.out.println ("Geben Sie den Preis ein:");
preis = scan.nextLong();

if ( preis < 10 ) 
{
versandkosten = 2 ;
}

else 
{
versandkosten = 3 ;
}

System.out.println ("Expressversand ( N = Nein, J = Ja) : ");
EXPRESSVERSANDKOSTEN = scan.nextBoolean();

System.out.println ("Rechnung:");
System.out.println ( + artikel ) ;

if (  EXPRESSVERSANDKOSTEN = J )
{
versandkosten2 = (versandkosten + EXPRESSVERSANDKOSTEN);
System.out.println ("Versand :" + versandkosten2+ EXPRESSVERSANDKOSTEN);
}


System.out.println ("Gesamt :" + preis + versandkosten );
}
}

Und das hier ist die Fehlermeldung die angezeigt wird:

operator + cannot be applied to long, boolean
versandkosten2 = (versandkosten + EXPRESSVERSANDKOSTEN);


(Das Blaue ist das Problem.)


Kann mir da jemand helfen?
 

HoaX

Top Contributor
Steht doch ziemlich klar dort, du kannst keinen Long und einen Boolean addieren.
Was soll denn herauskommen bei 4 + true, oder bei 2 + false?

Ich würde erstmal anfangen den Code aufzuräumen und passendere Variablennamen zu wählen, dann fällt dir dein Fehler ganz leicht auf und wie du ihn beheben kannst.
 

taaz

Mitglied
Hallo Anfänger97,

zuerst einmal Willkommen im Forum :)

Dann würde ich dir für dich selbst und als Freundlichkeit gegenüber den Forenmitgliedern empfehlen, deinen Code einzurücken. Es lässt sich für alle Beteiligten, einschließlich dir selbst, besser lesen.

Nun zu deinem Problem:
Was genau soll die Zeile mit dem Fehler tun?
Du hast eine Boolean der du das Ergebnis einer Addition von Boolean und Long zuweisen möchtest.
Was genau ist das von dir gewollte Ergebnis?

lg
taaz
 

Crian

Top Contributor
bei [c]if ( EXPRESSVERSANDKOSTEN = J )[/c] müsste es auch knallen. Immerhin weißt du einer finalen, boolschen Variablen einen Wert zu.
 

taaz

Mitglied
Ich denke mal es soll einfach
Java:
if(EXPRESSVERSANDKOSTEN)
heißen, denn das prüft, ob der Wahrheitswert in EXPRESSVERSANDKOSTEN wahr ist und führt dann den nachfolgenden Code aus.
 

Crian

Top Contributor
Gehen wir mal Schrittweise vor.

1) Ich kopiere das da oben in Eclipse und lasse es nach meinem persönlichen Geschmack formatieren (ein Tastendruck):

Java:
package forumProblems;

import java.util.Scanner;

class Delikatessen {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long versandkosten;
        final boolean EXPRESSVERSANDKOSTEN;
        long preis;
        int artikel;
        boolean J;
        boolean versandkosten2;

        System.out.println("Geben Sie den Artikel ein: ");
        artikel = scan.nextInt();

        System.out.println("Geben Sie den Preis ein:");
        preis = scan.nextLong();

        if (preis < 10) {
            versandkosten = 2;
        }

        else {
            versandkosten = 3;
        }

        System.out.println("Expressversand ( N = Nein, J = Ja) : ");
        EXPRESSVERSANDKOSTEN = scan.nextBoolean();

        System.out.println("Rechnung:");
        System.out.println(+artikel);

        if (EXPRESSVERSANDKOSTEN = J) {
            versandkosten2 = (versandkosten + EXPRESSVERSANDKOSTEN);
            System.out.println("Versand :" + versandkosten2
                    + EXPRESSVERSANDKOSTEN);
        }

        System.out.println("Gesamt :" + preis + versandkosten);
    }
}

Dann springen einem schon rote Fehler entgegen. Aber um die kümmere ich mich erst mal noch nicht. Denn das ganze ist noch schrecklich unleserlich. Unnötig zu frühe Deklarationen schiebe ich dahin, wo sie gebraucht werden. Ich merke aber, dass mit [c]J[/c] irgendwas nicht stimmt. Shauen wir uns das mal zusammen an:

Java:
class Delikatessen {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("Geben Sie den Artikel ein: ");
        int artikel = scan.nextInt();

        System.out.println("Geben Sie den Preis ein:");
        long preis = scan.nextLong();

        long versandkosten;
        if (preis < 10)
            versandkosten = 2;
        else
            versandkosten = 3;

        System.out.println("Expressversand ( N = Nein, J = Ja) : ");
        final boolean EXPRESSVERSANDKOSTEN = scan.nextBoolean();

        System.out.println("Rechnung:");
        System.out.println(+artikel);

        boolean versandkosten2;
        boolean J;
        if (EXPRESSVERSANDKOSTEN = J) {
            versandkosten2 = (versandkosten + EXPRESSVERSANDKOSTEN);
            System.out.println("Versand :" + versandkosten2
                    + EXPRESSVERSANDKOSTEN);
        }

        System.out.println("Gesamt :" + preis + versandkosten);
    }
}

Das Problem scheint zu sein, dass du etwas anderes meinst, als du schreibst. Ich vermute einfach mal so etwas, aber das ist wild geraten:

Java:
class Delikatessen {

    private final static int EXPRESS_VERSAND_KOSTEN = 4711;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("Geben Sie den Artikel ein: ");
        int artikel = scan.nextInt();

        System.out.println("Geben Sie den Preis ein:");
        long preis = scan.nextLong();

        long versandkosten;
        if (preis < 10)
            versandkosten = 2;
        else
            versandkosten = 3;

        System.out.println("Expressversand ( N = Nein, J = Ja) : ");
        final boolean expressversand = scan.nextBoolean();
        if (expressversand)
            versandkosten += EXPRESS_VERSAND_KOSTEN;

        System.out.print("Rechnung:\n"
                + "Artikel : " + artikel + "\n"
                + "Preis   : " + preis   + "\n"
                + "Versand : " + versandkosten + "\n\n"
                + "Gesamt  : " + preis + versandkosten + "\n");
    }
}
 

Quaxli

Top Contributor
Hab's Dir mal zurecht gefrickelt: ;)

Java:
import java.util.Scanner;

class Delikatessen {
	

	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);

		System.out.println("Geben Sie die Artikelnummer ein: ");
		int artikel = scan.nextInt();

		System.out.println("Geben Sie den Preis ein:");
		long preis = scan.nextLong();  

		int versandkosten = 3;
		
		if (preis < 10) {
			versandkosten = 2;
		}	

		System.out.println("Expressversand ( N = Nein, J = Ja) : ");
		String express = scan.next(); //hab ich mal in String geändert.

		System.out.println("Rechnung:");
		System.out.println("Artikel: "+artikel);

		if (express.equals("J")) {
			versandkosten += 5; //hab' ich jetzt mal erfunden 5 € Auf schlag für Expressversand
		}
		System.out.println("Versand: " + versandkosten); //Versandkosten fallen immer an, daher auch immer hinschreiben?

		System.out.println("Gesamt: " + (preis + versandkosten)); //Addition in Klammern, sonst schreibt er das nur hintereinander weg
	}
}
 

Quaxli

Top Contributor
Gehen wir mal Schrittweise vor.
....
Java:
class Delikatessen {

    private final static int EXPRESS_VERSAND_KOSTEN = 4711;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("Geben Sie den Artikel ein: ");
        int artikel = scan.nextInt();

        System.out.println("Geben Sie den Preis ein:");
        long preis = scan.nextLong();

        long versandkosten;
        if (preis < 10)
            versandkosten = 2;
        else
            versandkosten = 3;

        System.out.println("Expressversand ( N = Nein, J = Ja) : ");
        final boolean expressversand = scan.nextBoolean();
        if (expressversand)
            versandkosten += EXPRESS_VERSAND_KOSTEN;

        System.out.print("Rechnung:\n"
                + "Artikel : " + artikel + "\n"
                + "Preis   : " + preis   + "\n"
                + "Versand : " + versandkosten + "\n\n"
                + "Gesamt  : " + preis + versandkosten + "\n");
    }
}

Du solltest sowas auch ausprobieren. Die Bedingung mit dem Expressvesand haut, zumindest bei mir, nicht hin.

Java:
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at java.util.Scanner.nextBoolean(Unknown Source)
	at Delikatessen.main(Delikatessen.java:23)
 

Quaxli

Top Contributor
Noch ein Tipp als Nachtrag:

Folgender Code ist gerade für Anfägner gefährlich:

Java:
        if (expressversand)
            versandkosten += EXPRESS_VERSAND_KOSTEN;

Damit fällt man nämlich auf die Nase, wenn in der if-Bedingung mal mehr als eine Zeile stehen soll.
Besser ist es, sich anzugewöhnen, den Code der im Falle einer gültigen Bedingung greifen soll, grundsätzlich als Block in geschweifte Klammern zu setzen.

Java:
        if (expressversand){
            versandkosten += EXPRESS_VERSAND_KOSTEN;
        }

Das spart einem u. U. eine unnötige Fehlersuche. Wenn Du Dir Codebeispiele hier im Forum ansiehst, kannst Du sehen, daß die meisten die Vorsichtsmaßnahme anwenden. ;)
 

Crian

Top Contributor
Nun, da kann man getrost geteilter Meinung sein. Einrücken sollte man!

Im Übrigen ist die Angabe J/N falsch. Man muss "true" oder "false" eingeben:

Code:
Geben Sie den Artikel ein: 
1
Geben Sie den Preis ein:
2
Expressversand ( N = Nein, J = Ja) : 
true
Rechnung:
Artikel : 1
Preis   : 2
Versand : 4713

Gesamt  : 24713
 

Crian

Top Contributor
Ich hatte vorher diese komische Scannerklassen noch nicht verwendet, ich hatte mich leichtsinniger Weise darauf verlassen, dass wenigstens das stimmt. :)

Bei uns bekommen Programme entweder Parameter oder eine grafische Oberfläche.
Zu Übungszwecken ist das natürlich ganz nützlich so, ich wusste aber bis eben auch nicht, dass es true als Eingabe möchte. Da hab ich einfach probiert.
 

KingOfExceptions

Bekanntes Mitglied
Erstmal ein großes DANKESCHÖN an alle die sich gedanken gemacht haben um mein kleines problem zu lösen. Da es missverständnisse mit der aufgabe gibt hab ich die hier hingeschrieben:

Ein Online-Versand braucht ein Programm, das Bestellungen über ein Internetformular entgegen nimmt. Das Programm fragt welchen Artikel der Kunde möchte, den Preis und ob der Artikel per Express verschickt werden soll. Für Artikel unter $10 betragen die Versandkosten 2.00. Kostet der Artikel $10 oder mehr betragen sie $3.00. Der Expresszuschlag beträgt $5.00.

(Da ich erst mit Java angefangen habe, sollten die programme nicht allzu kompliziert sein deswegen bitte als vorlage mein programm benutzen.)

Außerdem bitte ich darum möglichst kleine änderungen zu vollziehen, die auch für einen anfänger wie mich verständlich sind. :oops:

@Quaxli: Bei mir haut das programm von Crian auch nicht hin. :oops:
 

KingOfExceptions

Bekanntes Mitglied
Falls es noch jemanden interessiert, hier ist das richtige Programm:

Java:
import java.util.Scanner;
class Delikatessen
 {
 public static void main (String [] args)
  {
  Scanner scan= new Scanner (System.in);
  double versandkosten;
  double preis;
  String artikel;
  boolean J;
  long expressversandkosten;
  expressversandkosten=5;
  
  System.out.println ("Geben Sie den Artikel ein: ");
  artikel = scan.next();

  System.out.println ("Geben Sie den Preis ein:");
  preis = scan.nextDouble();

   if ( preis < 10 ) 
   {
    versandkosten = 2.0 ;
   }

   else 
   {
    versandkosten = 3.0 ;
   }

  System.out.println ("Expressversand ( n= Nein, j= Ja) : ");
  String express = scan.next();

  System.out.println ("Rechnung:");
  System.out.println ( artikel );

  if ( express.equals ("j") )
  {
   versandkosten = ((versandkosten + expressversandkosten));
   System.out.println ("Versand :" + versandkosten);
  }
  preis= preis+versandkosten;

  System.out.println ("Gesamt :" + preis);

 }

}

ich habs jetzt nicht mehr eingerückt weils ein "altes" programm ist war es noch nicht eingerückt......
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G warum operator || cannot be applied to int, double Allgemeine Java-Themen 11
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
D Selenium - cannot find Chrome binary Allgemeine Java-Themen 6
bueseb84 Java : Cannot find Symbol Allgemeine Java-Themen 7
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
C Compiler-Fehler Cannot find symbol bei Hat-Beziehungen Allgemeine Java-Themen 5
Tarrew RMI Java RMI - com.sun.proxy.$Proxy1 cannot be cast to Funktionen Allgemeine Java-Themen 0
A Eclipse - Fehler beim "RUN" - "Unable to Launch - The selection cannot be launched" Allgemeine Java-Themen 6
R Char cannot be derefenrenced? Allgemeine Java-Themen 14
M Cannot create a generic array of T Allgemeine Java-Themen 5
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
127.0.0.1 Methodenaufruf -cannot find symbol- Allgemeine Java-Themen 14
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
B Cannot find main-claas... Allgemeine Java-Themen 21
P Default constructor cannot handle exception type Allgemeine Java-Themen 6
M cannot be cast to java.lang.Comparable Allgemeine Java-Themen 5
Tobse Cannot find symbol : construktor --- Deklariert! Allgemeine Java-Themen 9
D 'InputStreamReader' & 'BufferedReader' führen zu "cannot find symbol"-Fehler Allgemeine Java-Themen 3
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
B cannot find Symbol Allgemeine Java-Themen 2
K java.io.IOException: Cannot validate certificate for jogl.dll Allgemeine Java-Themen 6
Saxony assert cannot be resolved Allgemeine Java-Themen 5
? Cannot run program + Vista Allgemeine Java-Themen 8
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
B aus java heraus kompillierte Klassen - cannot be resolved Allgemeine Java-Themen 3
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
R cannot be referenced! Allgemeine Java-Themen 18
R Cannot be referenced. Allgemeine Java-Themen 7
G Kompiler Fehler: cannot resolve symbol: class Allgemeine Java-Themen 4
7 Cannot resolve Symbol keyPressed Allgemeine Java-Themen 3
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
A Fehlermeldung: cannot be resolved Allgemeine Java-Themen 5
D Probleme mit 'cannot execute runjava.bat' Allgemeine Java-Themen 2
G Fehlermeldung "cannot resolve symbol" Allgemeine Java-Themen 7
V Cannot resolve symbol Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben