Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Leider komme ich nicht mehr so wirklich weiter, könnte mir jemand Tipps geben?
Was mich besonders interessiert ist:
Ob die Rechnung wenigstens einigermaßen Java-gerecht formuliert/was genau ist falsch
Der Schleifentyp passt so?
Sonstige Fehler
Es geht mir nicht darum, eine Musterlösung zu erhalten.
Mein Code/Wirrwar:
Java:
public class Schaltjahr {
public static void main (String[] args){
System.out.println("Bitte Geben Sie das gewünschte Jahr ein!");
schaltjahr();
System.out.println("Fertig.");
}
public static void schaltjahr(){
java.util.Scanner input
= new java.util.Scanner (System.in);
int zahl;
if (zahl >=0)
/* wenn die zahl nicht kleiner ist als 1
* soll gerechnet werden
*/
/*wenn gerechnet wird dann soll
* folgendes geprüft werden
* (durch 4 teilbar und nicht durch 100)oder(durch 4 und durch 100 und durch 400)
* es darf keinen Rest geben
* wenn dies falsch ist, eben kein Schaltjahr
* wenn dies richtig ist; ein Schaltjahr
*/
(zahl/4 %=0 & != 100 %)|(zahl/4 %=0 & 100 %=0 & 400 %=0)
/* Diese Stelle ist für mich besonders schwierig
}
}
Das geht so nicht. Grundsätzlich vergleicht man Zahlen (und Objekte auf Identität) mit
Code:
==
ein einfaches
Code:
=
ist in Java eine Zuweisung.
Ich würde das für den Anfang auch nicht versuchen alles in eine Bedingung zu verwurschteln sondern mit kaskadirenen if Abfragen arbeiten:
Java:
if (zahl%4==0) { // potentielles Schaltjahr
if (zahl%400==0) {
...
}
...
}
else
System.out.println(zahl + ": ist kein Schaltjahr");
hier mal die Methode, die ich dir zuvor schon in dem anderen Thread gepostet habe. Auf die Fehler wurdest du ja bereits hingewiesen, wie ich gerade noch gesehen habe.
Die Erkärung zum Quelltest steht als Kommentar dabei.
Java:
public class Test {
public static void main(String[]args ){
System.out.println(isLeap(2000)); // Aufgruf der Methode isLeap und übergabe eines Parameters nämlich 2000. Das heißt es wird mit 2000 weitergerechnet. Und Ausgabe des Ergebnisses in der Console.
}
static boolean isLeap( int year ) // das (int year) zeigt an, das beim aufruf dieser Methode ein Parameter übergeben werden muss. Das Boolean steht für den Rückgabetyp der Methode. In deisem Fall (Richtig/Falsch)
{
return year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 );
/*
**Es wird die Zahl die Übergeben wird überprüft, ob Sie:
** durch 4 ohne Rest teilbar (%) ist UND (&&) das Jahr durch 100 einen Rest hat ODER (||) das Jahr durch 400 null ergibt.
*/
}
}
Ein Jahr ist Schaltjahr, wenn es durch 4 teilbar ist.
Ist es aber auch durch 100 teilbar, dann gilt Regel 1 nicht, und es ist kein Schaltjahr.
Ist es aber auch durch 400 teilbar, dann gilt Regel 2 nicht, und es ist doch ein Schaltjahr.
Da habe ich mich logisch aber ganz böse vertan :wuerg:
Ich habe zwar noch immer nicht den geringsten Durchblick, dennoch habt Ihr mir schon um einiges weiter geholfen.
Auf die Gefahr hin, dass ich mich endgültig als Idiot darstelle, hätte ich das nächste Geschreibsel auch noch gerne geprüft.
Java:
public class Schaltjahr {
public static void main (String[] args){
System.out.println("Bitte Geben Sie das gewünschte Jahr ein!");
System.out.println("Fertig.");
System.out.println(isLeap(y));
/* "cannot be resolved to a variable" und wenn ich es weg lasse ist es undefiniert
* was mache ich nun?
*/
}
}
public static void schaltjahr(){
java.util.Scanner input
= new java.util.Scanner (System.in);
int y = 0;
System.out.println(isLeap(y));
if (y >= 0)
static boolean isLeap ( int y ){
return y % 4 == 0 && ( y % 100 != 0 || y % 400 == 0 );
/* "void methods cannot return a value" und wie bekomme ich anstatt eines Wertes true/false
*oder das ist doch, was ich benötige?
*
*
*/
Ach so richtig blamieren kann man sich wohl nicht.
Allerdings musst du ein bisschen auf die {} Klammern aufpassen.
ich hab deinen Code jetzt mal ein bisschen angepasst. Und zum Teil ein paar Kommentare angefügt, wenn noch etwas unklar ist einfach sagen.
Sollte soweit glaub ich jetzt auch funktionieren.
Java:
import java.util.*; // Package wird importiert, somit muss man die Klasse nicht immer komplett aufrufen
public class Test {
public static void main (String[] args){
System.out.println("Bitte Geben Sie das gewünschte Jahr ein!");
// System.out.println("Fertig.");
// System.out.println("Das eingegebene Jahr ist ein Schaltjahr: " + isLeap(schaltjahr())); --> würde die Untere Variante wählen. (mit der if-Anweisung)
if(isLeap(schaltjahr()) == true){
System.out.println("Es ist ein Schaltjahr");
}else{
System.out.println("Es ist kein Schaltjahr");
}
/* "cannot be resolved to a variable" und wenn ich es weg lasse ist es undefiniert
* was mache ich nun?
*
* Antwort: Die Variable y ist eine lokale von: schaltjahr, diese kannst du auch nur in dieser Methode verwenden.
* Die Methode gibt nun einen wert zurück und kann dieser kann jetzt verwendet werden. (also mit return)
*/
}
public static int schaltjahr(){ // gibt nun ein int zurück
Scanner input = new Scanner (System.in);
int y = input.nextInt();
System.out.println("Das ist das eingegebene Jahr:" + y);
return y;
}
static boolean isLeap ( int y ){
return y % 4 == 0 && ( y % 100 != 0 || y % 400 == 0 );
/* "void methods cannot return a value" und wie bekomme ich anstatt eines Wertes true/false
*oder das ist doch, was ich benötige?
*
*
*/
}
}