Der Programmier-Thread

PSN-Name: Tekken-Ninja
Hey Leute
Ich hab eine Hausaufgabe in Informatik bekommen mit der ich 2 kleine Probleme hab,

1. Wir sollen eine Lohnabrechnung mit Hilfe von Java machen
Ich hab dieses Programm geschrieben und er zeigt mir in 3 Zeilen Fehler an und zwar in den fettgedruckten. Netbeans zeigt mir an, dass ich ";" vergessen hab aber ich hab sie am Ende der Zeile gesetzt. Also verstehe ich nicht was falsch ist.




package lohnabrechnung;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String inData;
int a, basislohn, w, wplus, extralohn;
System.out.print("Arbeitszeit? ");
inData = stdin.readLine();
a = Integer.parseInt(inData);
System.out.print("davon Wochende? ");
inData = stdin.readLine();
w = Integer.parseInt(inData);
extralohn = Integer.parseInt(inData);
basislohn = 175*12;
wplus = w*12*0,5;
if (a == 175)
{
extralohn = 0;
}
else
if (a <= 200)
{
extralohn = (a-175)*12*1,1;
}
else
{
extralohn = 25*12*1,1+(a-200)*12*1,25;
}
System.out.println();
System.out.println("Lohn: " + basislohn+wplus+extralohn) ;
}
}



2.Außerdem sollen wir das noch machen. Nur ich weiß nicht wie.
Damit das Programm nicht nach jeder Lohnabrechnung neu gestartet werden muss, soll jedes Mal nachgefragt werden, ob noch eine weitere Lohnabrechnung folgt.
Ich weiß, dass man noch mit while Schleifen arbeiten kann aber das sollen wir noch nicht machen.


Ich bin dankbar für jede Hilfe.
 
Zuletzt editiert:
PSN-Name: Nullnummer
Spielt gerade: verrückt
Kann es sein das die Programmierumgebung für Kommazahlen die eingabe mit einem Punkt anstelle des Komma verlangt??? also anstatt 0,5 probier mal 0.5 für deine 2.te frage hab ich zu wenig ahnung (gar keine) von java
 
PSN-Name: Tekken-Ninja
OK danke
Es hat geholfen. Das Programm funktioniert jetzt auch.
Nur hab ich jetzt ein anderes Problem
Er addiert am Ende mir die Beträge nicht im letzten Befehl.
System.out.println("Lohn: " + basislohn+wplus+extralohn) ;
Was hab ich vergessen?
 
PSN-Name: chrizeliq
OK danke
Es hat geholfen. Das Programm funktioniert jetzt auch.
Nur hab ich jetzt ein anderes Problem
Er addiert am Ende mir die Beträge nicht im letzten Befehl.
System.out.println("Lohn: " + basislohn+wplus+extralohn) ;
Was hab ich vergessen?
Einer mit der Gruende wieso Java als Einstiegssprache ungeeignet ist.

Mache
System.out.println("Lohn: " + (basislohn+wplus+extralohn)) ;
und es wird funktionieren.

Durch den String davor werden deine Variablen implizit in einen String umgewandelt, und der Plus-Operator fuehrt keine Addition mehr durch, sondern konkateniert die Strings.
 
PSN-Name: Tekken-Ninja
Es funktioniert nun alles. Danke
Könntet ihr mir nur noch sagen wie ich das hier machen kann?
Damit das Programm nicht nach jeder Lohnabrechnung neu gestartet werden muss, soll jedes Mal nachgefragt werden, ob noch eine weitere Lohnabrechnung folgt.
Ich weiß, dass man noch mit while Schleifen arbeiten kann aber das sollen wir noch nicht machen.

Ich weiß, dass man die Befehle von vorhint kopieren muss.
Nur weiß ich nicht wie viele Befehle ich kopieren muss und ab welche Stelle ich sie einfügen muss.
 
Wie von dir gewünscht das ganze mit while Schleife. Ich bin mir nicht sicher, ob alles passt, habs nicht laufen lassen.

Edit:
[STRIKE]Ich sehe, du hast da was mit BufferedReader gemacht, das müsste man dann noch nach vorne ziehen.[/STRIKE]

Code:
package lohnabrechnung;
import java.io.*;
public class Lohnabrechnung {
public static void main(String[] args) {
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    String inData;
    //Abfrage, ob eine Lohnabrechnung durchgefuehrt werden soll
    System.out.println("Lohnabrechnung berechnen? - Antworten Sie mit j oder n.");
    //Lese Eingabe ein
    inData = stdin.readLine();
    //Erzeuge Variable mit Wahrheitswert false, um Standardmaesig nicht in Schleife einzutreten
    boolean work = false;
    //Falls User sagt ja, dann setze Variable auf true
    if (inData == "j") {
        work = true;
    }
    //Falls User ja gewaehlt, wird in Schleife gesprungen, sonst wird sie nicht ausgefuehrt und Programm endet
    while (work) {
	int a, basislohn, w, wplus, extralohn;
	System.out.println("Arbeitszeit? ");
	inData = stdin.readLine();
	a = Integer.parseInt(inData);
	System.out.println("davon Wochende? ");
	inData = stdin.readLine();
	w = Integer.parseInt(inData);
	extralohn = Integer.parseInt(inData);
	basislohn = 175*12;
	wplus = w*12*0,5;
	if (a == 175)
	{
	extralohn = 0;
	}
	else
	if (a <= 200)
	{
	extralohn = (a-175)*12*1,1;
	}
	else
	{
	extralohn = 25*12*1,1+(a-200)*12*1,25;
	}
	System.out.println();
	System.out.println("Lohn: " + basislohn+wplus+extralohn) ;

        //Frage User, ob dieser noch eine Abrechnung durchfuehren moechte
        System.out.println("Lohnabrechnung berechnen? - Antworten Sie mit j oder n.");
        //Lese Eingabe ein
        inData = stdin.readLine();
        
        //Falls User sagt nein, dann setze Variable auf false und Schleife wird abgebrochen, Programm endet.
        //Andernfalls ist Wert noch true und Variable wird erneut ausgefuehrt
        if (inData == "n") {
            work = false;
        }
    }
    

}
}
 
Zuletzt editiert:
Ich habs mal laufen lassen und so passt es jetzt:
Code:
import java.io.*;
public class Lohn {
public static void main(String[] args) throws IOException {
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    String inData;
    //Abfrage, ob eine Lohnabrechnung durchgefuehrt werden soll
    System.out.println("Lohnabrechnung berechnen? - Antworten Sie mit j oder n.");
    //Lese Eingabe ein
    inData = stdin.readLine();
    //Erzeuge Variable mit Wahrheitswert false, um Standardmaesig nicht in Schleife einzutreten
    boolean work = false;
    //Falls User sagt ja, dann setze Variable auf true
    if (inData.equals("j")) {
        work = true;
    }
    //Falls User ja gewaehlt, wird in Schleife gesprungen, sonst wird sie nicht ausgefuehrt und Programm endet
    while (work) {
    int a, basislohn, w;
    double wplus, extralohn;
    System.out.println("Arbeitszeit? ");
    inData = stdin.readLine();
    a = Integer.parseInt(inData);
    System.out.println("davon Wochende? ");
    inData = stdin.readLine();
    w = Integer.parseInt(inData);
    extralohn = Integer.parseInt(inData);
    basislohn = 175*12;
    wplus = w*12*0.5;
    if (a == 175)
    {
    extralohn = 0;
    }
    else
    if (a <= 200)
    {
    extralohn = (a-175)*12*1.1;
    }
    else
    {
    extralohn = 25*12*1.1+(a-200)*12*1.25;
    }
    System.out.println();
    System.out.println("Lohn: " + (basislohn+wplus+extralohn)) ;

        //Frage User, ob dieser noch eine Abrechnung durchfuehren moechte
        System.out.println("Lohnabrechnung berechnen? - Antworten Sie mit j oder n.");
        //Lese Eingabe ein
        inData = stdin.readLine();
        
        //Falls User sagt nein, dann setze Variable auf false und Schleife wird abgebrochen, Programm endet.
        //Andernfalls ist Wert noch true und Variable wird erneut ausgefuehrt
        if (inData.equals("n")) {
            work = false;
        }
    }
    

}
}
Edit:
Die Fehler, die du oben hattest, müssten noch drin sein, ich hab raus, was mir aufgefallen ist.

PS:
Du brauchst für Kommazahlen einen anderen Typ, also nicht int, sondern double oder float (diese unterscheiden sich in der Größe)

PPS:
Das package musst du noch hinzufügen, ich habs für meinen Test raus. Und nicht vergessen, den Klassennamen anzupassen, der muss ja lauten, wie die *.class Datei heißt.
 
Zuletzt editiert:
PSN-Name: KILIK
Hey Leute,

kennt sich hier jemand zufällig mit der Java Entwicklungsumgebung - Greenfoot aus?

Baue grad ein Spiel als Facharbeit nach und möchte gerne animierte Gifs verwenden.

Habe diese Support Class gefunden: http://greenfootgallery.org/scenarios/260

Leider kann ich die aufgrund veralteter Versionen nicht compilen. Dennoch kann ich den SourceCode lesen, wenn ich jedoch diesen bei mir einbau und ein gif benutzen will, spuckt greenfoot mir immer einen Fehler aus.

Wenn jemand näheres weiß, wär super :D

mfg
 
PSN-Name: chrizeliq
Hey Leute, was haltet ihr von Ruby? Und in dem Zusammenhang von MacRuby und hat jemand eine Literaturempfehlung zu Ruby?
So als Sprache ist Ruby ganz nett, und ich mag es als Sprache eigentlich lieber als z.b. Python. Habe zu Ruby vor 2 Jahren auch mal wieder einen Blog-Eintrag geschrieben: http://chrizel.com/post/818399246/ruby -- nix interessantes -- ich habe Ruby bei einem Deployment-Script in der Arbeit im Einsatz... die Sprache finde ich erfrischend und teilweise konsistenter als Python.

Letztendlich habe ich mich dann doch eher fuer Python entschieden (und mache ja derzeit die onpsx Neuentwicklung in Django, was mir besser gefaellt als Rails) -- http://chrizel.com/post/818399559/python -- der Vorteil von Python ist nicht unbedingt die Sprache, aber Python hat IMHO wesentlich bessere Libraries um ernsthafte Sachen damit zu machen.

Man weiss ja nicht was Apple mit MacRuby noch vorhat -- es ist eine super Sache, aber fuer Cocoa wuerde ich weiterhin eher auf Objective-C setzen wollen. Es gibt ja bereits Geruechte, dass Apple eine komplett eigene Programmiersprache als Objective-C-Nachfolger entwickelt. Ich bin skeptisch.

Ich habe mehrere Ruby-Buecher. Der Klassiker ist Programming Ruby 1.9: The Pragmatic Programmers' Guide -- man kann es wie ein Tutorial durchmachen und sieht eine Menge, desshalb wahrscheinlich kein schlechter Einstieg.

Dann habe ich noch The Ruby Programming Language -- ist praktisch die Ruby-Version fuer "The C Programming Language" -- es wird die Sprache erklaert, geht aber mehr in Richtung Referenz.

Dann habe ich noch Design Patterns in Ruby, aber das ist ja ein spezielleres Buch.
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
Ich bin grad richtig stolz auf mich :D Hab den Dijsktra Algorithmus nach 3 Tagen Arbeit erfolgreich implementieren können!

Falls es jemanden interessiert, poste ich mal den Quellcode in Java. Vielleicht braucht den ja mal jemand und kann sich dran orientieren :) Es geht vielleicht etwas übersichtlicher und vllt sogar einfacher, aber meins läuft zumindest :)

Attribute der Klasse Dijkstra
Code:
   Knoten kurz;
   Knoten cur;
   List toDo = new List();
   String weg = "";
   Knoten current;

Suchalgorithmus
Code:
public String sucheWeg(Knoten pStart, Knoten pZiel)
  {
    Knoten aktuell = null;
    toDo.toFirst();
    toDo.insertBehind(pStart);
    pStart.setzeDistanz(0);
    pStart.markiere();
    while(!toDo.isEmpty())
    {
      toDo.toFirst();
      aktuell = (Knoten) toDo.getObject();
      aktuell.markiere();
      distanzEintragen(aktuell);
      toDo.toFirst();
      toDo.delete();
      kurzWeg(aktuell);
    }
    while(aktuell.vorgaenger != null)
    {
      weg = weg + aktuell.gibName();
      aktuell = aktuell.gibVorgaenger();
    }
    weg = weg + aktuell.gibName();
    return weg;
    
  }

Methode distanzEintragen
Code:
public void distanzEintragen(Knoten pKnoten)
  {
    List liste = pKnoten.gibKantenliste();
    liste.toFirst();
    while(!liste.isBehind())
    {
      Kante k =(Kante) liste.getObject();
      Knoten kn = (Knoten) k.gibNachbar(pKnoten);
      if(!kn.markiert){
      if(kn.gibDistanz()>(k.gibDistanz() + pKnoten.gibDistanz()))
        {
          kn.setzeDistanz((k.gibDistanz() + pKnoten.gibDistanz()));
          kn.setzeVorgaenger(pKnoten);
        }
      }
      liste.next();
    }
  }

Methode kurzWeg
Code:
public void kurzWeg(Knoten pKnoten)
  {
    List liste = pKnoten.gibKantenliste();
    liste.toFirst();
    boolean vorhanden = false;
    boolean drin = false;
    while(!liste.isBehind())
    {
      Kante k = (Kante) liste.getObject();
      Knoten kn = (Knoten) k.gibNachbar(pKnoten);
      if(!kn.markiert)
      {
        if(!toDo.isEmpty())
        {
          toDo.toFirst();
          Knoten current = (Knoten) toDo.getObject();
          String name = current.gibName();
          if(name.equals(kn.gibName()))
          {
            vorhanden = true;
            if(drin == false)
            {
              if(current.gibDistanz()>kn.gibDistanz())
              {
                toDo.insertBefore(kn);
                toDo.delete();
              }
            }
            else
            {
              toDo.delete();
            }
          }
          else
          {
            if(vorhanden == false)
            {
              if(current.gibDistanz()>kn.gibDistanz())
              {
                toDo.insertBefore(kn);
                toDo.next();
                drin = true;
              }
              else
              {
                toDo.next();
              }
            }
            else
            {
              toDo.toLast();
              toDo.next();
            }
          }
        }
        else
        {
          toDo.toFirst();
          toDo.insertBefore(kn);
        }
      }
    liste.next();
    }
  }

Ich muss zugeben, dass manche Bezeichnungen, vielleicht nicht optimal sind, vor allem kurzWeg. Aber ich hab mehrere Methoden gehabt, die das selbe tuen sollten, aber letztlich tut nur diese das, was sie auch soll. Hatte bei den alten nen kleinen Logikfehler :/ Naja, jetzt macht mich nieder, weil der Code wahrscheinlich verbesserungswürdig ist xD
 
PSN-Name: leckt mich an meinem haarigen hintern ihr haufen!
Spielt gerade: perl(pc); div. KOFs (ps3); GT6(ps3); sfIV(div.);
seit wann haben wir denn so einen thread? ich überlge schon seit wochen sowas in der art zu eröffnen einfach um sich mal ein wenig auszutauschen (nein die nerds auf arbeit reichen mir nicht :ugly:)

gleichzeitig möchte ich hier offiziell meine hassliebe zu perl zum ausdrcuk bringen...

perl die frau unter den scriptsprachen
 
Hi, ich habe eine Frage zu Python. Vielleicht kann jemand helfen. Und zwar würde ich gerne eine Klasse dynamisch mit ihrem Namen aufrufen, dass es geht, habe ich schon in Beispielcode gesehen, nur haut mir der Compiler immer Fehlermeldungen raus.

Code:
def play(self):
        next = self.start
        
        while True:
            print "\n----------"
            #print self.__dict__
            classToCall = self.start
            #print classToCall
            #print type(classToCall)
            next = classToCall('Alternative')
            next.start()
In der vorletzten Zeile will ich ein Objekt erzeugen und kriege immer folgende Fehlermeldung:

Traceback (most recent call last):
File "Engine.py", line 37, in <module>
engine.play()
File "Engine.py", line 33, in play
next = classToCall('Alternative')
TypeError: 'str' object is not callable
 
PSN-Name: chrizeliq
self.start ist ein String, oder? Das sagt zumindest die Meldung aus.

Das einfachste ist wohl, das Klassenobjekt mit eval aufzuloesen, damit du es bekommst:

next = eval(classToCall)('Alternative')

Besser waere aber, du hantierst gar nicht erst mit strings sondern speicherst die Klassenobjekte als solches, also wo du self.start gesetzt hast sagst du statt "self.start = "Foobar"" eher "self.start = Foobar" also nicht als string.
 
Gute Idee, ich hab es nicht als String gespeichert, damit gehts. Ich frage mich, ob der Autor des Buches (LearnPythonTheHardWay) den Code mit Strings zum Laufen bekommen hat. Vielleicht liegts am Mac Python...

Ich habe gelesen, eval wäre böse und man soll es nicht verwenden.
 
Top