Hilfe bei meinen Uni aufgaben gesucht :)

Hallo, habe mich in einem Programmierkurs eingeschrieben an der Uni Island. Schon bei meinem 1. Wochenuebungsblatt hapert es… programmieren ist aber auch schwer! Es sind insgesammt 5 Aufgaben. Wer hat lust zu helfen?

Aufgabe 1.2.10
Suppose that a variable a is declared as int = 2147483647 (or equivantly, Integer.MAX_VALUE). What do each of the following print?
a. System.out.println(a);
b. System.out.println(a+1);
c. System.out.println(2-a);
d. System.out.println(-2-a);
e. System.out.println(2a);
f. System.out.println(4
a);
Explain each outcome

meine Eingabe war:

public static void main (String[] args)
{
int a = Integer.parseInt (args[0]);
System.out.println(a);
System.out.println(a+1);
System.out.println(2-a);
System.out.println(-2-a);
System.out.println(2*a);
System.out.println(4*a);
}
}```

Und das kam heraus:

C:\Test>java uebung
Exception in thread “main” java.lang.NoClassDefFoundError: uebung (wrong name: U
ebung)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)


So, hat hier jemand einen Plan??
Ich verstehe das leider nicht... die 2. Uebung folgt :)

Gruss
Anne

Google mal nach Java Klassen und Variablen-Namen im Zusammenhang mit CaseSensitive…
Java-Klassen- und -Variablennamen sind eben solches. D.h. auf Groß-Kleinschreibung kommt es an.

Warum denn

int a = Integer.parseInt (args[0]);

?

a. System.out.println(a); -> Gewitter?
b. System.out.println(a+1); -> min value
c. System.out.println(2-a); -> min value+3 (min value is one smaller than -(max value))
d. System.out.println(-2-a); -> max value
e. System.out.println(2a); -> i suppose -2 (<<= 2, see here: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html )
f. System.out.println(4
a); -> i suppose -4 (<<= 3)

Hallo hallo, danke euch… also warum int a = Integer.parseInt (args[0]); das steht so im Buch bei einer anderen Aufgabe, dachte das wäre so richtig. Und int a = Integer.parseInt(args[0]); schrieb der prof auch. Das muesste richtig sein. @iKnwWhtUDidLast a. System.out.println(a); -> Gewitter? Das verstehe ich nicht ganz, ist das ein Scherz? Dachte da muesste doch zumindest einfach nur die zahl 2147483647 rauskommen?

Ist ein Scherz. Das war mal die Gewitter-Omi. Da kommt die gleiche/dieselbe Zahl raus. Allerdings kann ich diese Zahl auch net schreiben, wer merkt sich schon 2^31-1 (-1 da 0-basiert) auswendig?

Du solltest nach der API-Dokumentation von Integer und/oder Integer.MAX_VALUE schauen. Integer.parseInt ist nicht falsch, aber auch nicht richtig. Jute Nacht

@Spacerat : Das war uebrigends ein super Tip <3 danke!! Oh man manchmal sieht man den Wald vor Bäumen nicht… vielleicht sollte ich die programmierer Karriere an den Nagel haengen… und das ist er die 1. Aufgabe…schnuefff… Also nachdem ich Uebung gross geschrieben habe kommt folgendes:

C:\Test>java Uebung
Exception in thread „main“ java.lang.ArrayIndexOutOfBoundsException: 0
at Uebung.main(uebung.java:4)

Was ist denn jetzt schon wieder falsch oder muss ich etwa schreiben: System.out.println(a"+"1) und alle mathematischen Zeichen in Anführungszeichen schreiben?
@iKnwWhtUDidLast Danke dir werde das gleich mal googeln… kann doch nicht sein, das nur eine Einzige Aufgabe zu lösen sooo schwierig sein kann! Dir auch gute Nacht ich raetsel mal weiter :wink:

[QUOTE=Annefranz]C:\Test>java Uebung
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at Uebung.main(uebung.java:4)

Was ist denn jetzt schon wieder falsch…[/QUOTE]Nun haben wir vergessen ein Argument an “Uebung” zu übergeben:
C:\Test>java Uebung 2147483647
oder in der Klasse untergebracht:

  public static void main(String[] args) {
    if(args == null || args.length == 0) {
      args = new String[] {String.valueOf(Integer.MAX_VALUE)};
    }
    //... your code
  }
}```
ArrayIndizierung ist noch ein Kapitel für sich... der Index zählt von 0 bis Anzahl Elemente - 1. Ein leeres Array (mit 0 Elementen) kann im Prinzip also nicht indiziert werden, warum auch.

Versuch es mal mit dem Aufruf: java Uebung 2147483647

in dem String-Array args werden die Argumente gehalten, die du dem Programm beim Aufruf übergibst. mit args[0] greifst du auf das Element mit dem Index 0 in diesem String-Array zu, welches dann den Wert “2147483647” hat. Da du mit dem übergebenen Wert Rechenoperationen durchführen willst, wandelst du den String in den primitiven Datentyp int um indem du die Methode parseInt der Klasse Integer aufrufst. (Dabei ist allerdings zu beachten, dass es ein signed int ist, der dir dabei zurückgeliefert wird).

Write: int a = Integer.MAX_VALUE; System.out.println(a); System.out.println(a + 1); System.out.println(2 - a); System.out.println(-2 - a); System.out.println(2 * a); System.out.println(4 * a); }

Oh man ihr seit Schätze, vielen vielen Dank… wenigsten Aufgabe nr. 1 gelöst :slight_smile: Werde das gleich mal nacharbeiten. Und mich an Aufgabe 2 setzen. Was wuerde ich tun wenn ich dieses Forum nicht gefunden haette und so tolle Menschen die Antworten? Haette vermutlich den kurs am Dienstag um 12:00 geschmissen.
Nochmals 1000 Dank

Nur nicht entmutigen lassen, aller Anfang ist schwer.

Ich bin kein Prof, aber wenn du in den Veranstaltungen immer zuhören tust, dann sollte Programmierung doch kein Problem bieten (und Nacharbeit, Vorarbeit). Bist du denn nur in einem ProgrammierungsKurs und studierst eigtl. eine andere Richtung? Alles Notwendige über Java solltest du in “Java ist auch eine Insel” (auch online verfügbar), “Java von Kopf bis Fuß” und Tutorials im Internet finden. Zumindest alles außer das mittige ist aber Keine englischsprachige Literatur.

Zu deiner aktuellen Frage solltest du dir Zweierkomplement/two’s complement, Hello world (Erstes Programm), Kommandozeilenparameter (command line parameters), Quelltext, Übersetzung/Compilierung udn Ausführung noch mal angucken. lg

@iKnwWhtUDidLast ja ich studiere eigentlich was anderes, habe vorher noch nie programmiert und die Vorlesung ist auf Islaendisch (Uni Island). Bin gerade im Mutterschutz zu hause und dachte ich nutze die Zeit programmieren zu lernen. Dh. ich komme nicht immer in die Vorlesungen, nutze eben das Kursbuch die islaendische power point Preaesentationen und versuche das zu verstehen so gut es geht. Danke fuer die Tips, werde mir die Buecher zu gemuete fuehren. Auf deutsch das waere ja mal was anderes :wink: @Paddelpirat vielen dank. Man muss sich das vermutlich vorstellen wie 1 mio teile puzzel oder so…am besten faengt man erstmal an die Ranstuecke raus zu suchen… schrittchen fuer schrittchen.

*** Edit ***

So, meine lieben: Inzwischen habe ich diese Aufgabe halbwegs bewaeltigt und stecke an der 3. fest:

Write a program that takes three positive integers as command-line arguments and prints true if any one of them is greater than or equal to the sum of the other two and false otherwise (Note: This computation tests whether the three numbers could be the lengths of the sides of some triangle.)

Habe dann mal lustig drauf los programmiert und hatte mir die lösung ungefaehr so vorgestellt:

public class Triangle {
public static void main(String[] args){
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = Integer.parseInt(args[2]);
boolean Triangle;
Triangle = (a = (b+c));
isTriangle = isTriangle || (a > (b+c));
isTriangle = isTriangle || (b = (a+c));
isTriangle = isTriangle || (b > (a+c));
isTriangle = isTriangle || (c = (a+b));
isTriangle = isTriangle || (c > (a+b));
System.out.println(isTriangle);
}
}

Tja war wohl nichts denn jetzt kommt anstelle von dem gewuenschten schon beim compilen (javac Triangle.java):
C:\Test>javac Triangle.java
Triangle.java:7: error: incompatible types
Triangle = (a = (b+c));
^
required: boolean
found: int
Triangle.java:8: error: cannot find symbol
isTriangle = isTriangle || (a > (b+c));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:8: error: cannot find symbol
isTriangle = isTriangle || (a > (b+c));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:9: error: cannot find symbol
isTriangle = isTriangle || (b = (a+c));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:9: error: cannot find symbol
isTriangle = isTriangle || (b = (a+c));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:10: error: cannot find symbol
isTriangle = isTriangle || (b > (a+c));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:10: error: cannot find symbol
isTriangle = isTriangle || (b > (a+c));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:11: error: cannot find symbol
isTriangle = isTriangle || (c = (a+b));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:11: error: cannot find symbol
isTriangle = isTriangle || (c = (a+b));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:12: error: cannot find symbol
isTriangle = isTriangle || (c > (a+b));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:12: error: cannot find symbol
isTriangle = isTriangle || (c > (a+b));
^
symbol: variable isTriangle
location: class Triangle
Triangle.java:13: error: cannot find symbol
System.out.println(isTriangle);
^
symbol: variable isTriangle
location: class Triangle
12 errors

Mist. Dachte ich haette das kapiert.

Hey, Vergleiche mit ==. = ist der Zuweisungsoperator!

Triangle = (a = (b+c));

Zuweisungen werden mit =, Vergleiche immer mit == durchgeführt (Vergleiche zwischen primitiven! Vergleiche zwischen Objekten mit equals()).
Was in der Zeile im Moment passiert passiert könnte man auch so schreiben:

Triangle = a```
Daher erklärt sich dann auch die Fehlermeldung, dass int nicht in boolean reinpasst.

Für deinen Code  im Forum kannst du übrigens
````````-Tags verwenden.

Und die Vergleiche kriegst du auch noch kürzer, Java kennt nämlich auch den `>=`-Operator ;)

Vorsicht auch mit den Variablennamen: dein boolean heißt `Triangle` und du verwendest eine nicht-deklarierte Variable `isTriangle`
Die Zuweisungen könntest du anschließend auch in eine Zeile schreiben,
```boolean foo = bar;
foo = foo || bar1;
foo = foo || bar2;```
geht auch als ```foo = bar || bar1 || bar2;```

Gruß
    boolean isTriangle; //statt boolean Triangle;
    isTriangle = (a == (b+c)); //stattTriangle = (a = (b+c));

usw.

Danke Firephönix und Hauro eure Hilfe hat immerhin die Fehlerzahl auf 3 Fehler reduziert :slight_smile:

public static void main(String[] args){
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = Integer.parseInt(args[2]);
boolean Triangle;
Triangle =(a >==(b+c));
Triangle = Triangle || (b >== (a+c));
Triangle = Triangle || (c >== (a+b));
System.out.println(isTriangle);
}
}```

C:\Test>javac Triangle.java
Triangle.java:7: error: illegal start of expression
Triangle =(a>==(b+c));
              ^
Triangle.java:8: error: illegal start of expression
Triangle = Triangle ||(b >== (a+c));
                           ^
Triangle.java:9: error: illegal start of expression
Triangle = Triangle ||(c >== (a+b));
                           ^
3 errors

Das was er in dem c:// fenster wiedergibt ist hier irgendwie nicht richtig dargestellt. Da zeigt der kleine Pfeil naemlich auf das doppelte gleichheits zeichen. Vielleicht sollte ich mich mehr uber deklarierte und nicht deklarierte variablen informieren?
Man das tut mir wirklich leid dass ich da so auf dem Schlauch stehe. Hatte mir das irgendwie einfacher und (fuer mich) logischer vorgestellt.

*** Edit ***

Ach habe da noch einen Fehler entdeckt habe System.out.println(isTriangle); veraendert in: System.out.println(Triangle); Aber auch dann bleiben es 3 Fehler

Der Operator heißt >= und nicht >==.

@cmrudolph :kiss: jetzt funktioniert es das ist ja suuuuper!!!