Parameterübergabe bei Methoden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Parameterübergabe bei Methoden

    Guten Morgen,
    kann mir vielleicht jemand kurz erklären warum mir mein Compiler (JDeveloper IDE) mir hier an Stelle (17,17) sagt, dass die Methode keinen Wert zurück gibt?

    Quellcode

    1. import javax.swing.JOptionPane;
    2. public class fakultaet_mit_methode {
    3. public static void main(String[] args) {
    4. String sMsg = " ";
    5. //String sEingabe = JOptionPane.showInputDialog( "Bitte geben Sie eine Zahl ein: " );
    6. //int iWert = Integer.parseInt( sEingabe );
    7. int iWert = 2;
    8. sMsg = fakultaet( iWert );
    9. System.out.println( sMsg );
    10. }
    11. static String fakultaet( int iWert ) {
    12. int iZahl = 1;
    13. if (iWert <= 0 ) {
    14. String sMsg = "bitte keine neg. Zahlen eingeben \n";
    15. }
    16. else {
    17. for (int i = 2; i <= iWert; i++ ) {
    18. iZahl *= i;
    19. }
    20. String sMsg = "Die Fakultät der eingegebenen ist: " + iZahl;
    21. return sMsg;
    22. }
    23. }
    24. }
    Alles anzeigen



    Ich habe das "Programm" noch mal in prozeduraler (?) Form vorliegen, und da klappts, also liegts ja nicht am rechnenden Code.

    Vielen Dank!
  • ahh okay. Fehler in der Syntax!!
    Ich hab den Rückgabewert mit in den else Zweig gepackt.... da sieht man mal, was gutes Einrücken alles bewirkt. Sry für die Verschwendung von Speicherplatz. Kann geclosed / gelöscht werden!


    //edit:
    ihr könntet mir vielleicht doch helfen ;)
    wie könnte ich eine getZahl(int n) Methode in main aufrufen?
    ->

    Quellcode

    1. static int getZahl(int n){
    2. Scanner sc = new Scanner( System.in );
    3. System.out.print ( "Zahl eingeben: " );
    4. int iWert = sc.nextInt();
    5. return n;
    6. }


    Wenn ich das so machen:

    Quellcode

    1. iWert = getZahl( n );


    Dann mosert er rum, dass ich die beiden Vars nicht initialisiert habe; und wenn ich das tue, arbeitet er mit den Werten.. :/
    Danke

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von kingele ()

  • kingele schrieb:

    ahh okay. Fehler in der Syntax!!
    Ich hab den Rückgabewert mit in den else Zweig gepackt.... da sieht man mal, was gutes Einrücken alles bewirkt. Sry für die Verschwendung von Speicherplatz. Kann geclosed / gelöscht werden!


    //edit:
    ihr könntet mir vielleicht doch helfen ;)
    wie könnte ich eine getZahl(int n) Methode in main aufrufen?
    ->

    Quellcode

    1. static int getZahl(int n){
    2. Scanner sc = new Scanner( System.in );
    3. System.out.print ( "Zahl eingeben: " );
    4. int iWert = sc.nextInt();
    5. return n;
    6. }


    Wenn ich das so machen:

    Quellcode

    1. iWert = getZahl( n );


    Dann mosert er rum, dass ich die beiden Vars nicht initialisiert habe; und wenn ich das tue, arbeitet er mit den Werten.. :/
    Danke


    Was hast du denn genau in der Main geschrieben?

    Nur

    Quellcode

    1. iWert = getZahl(n);

    reicht nicht.

    Wenn dann

    Quellcode

    1. int iWert = getZahl(n);

    Stark Typisiert und so :)

    Gruß

    Thimo
  • ähh klar, wurde natürlich korrekt deklariert!
    So sieht mein Code aus, bzw habe ich es mir gedacht:

    Quellcode

    1. import java.util.Scanner;
    2. public class fakultaet_mit_methode {
    3. public static void main(String[] args) {
    4. String sMsg = " ";
    5. int = 0;
    6. int iWert = getZahl(n);
    7. sMsg = fakultaet( iWert );
    8. System.out.println( sMsg );
    9. }
    10. static String fakultaet( int iWert ) {
    11. int iZahl = 1;
    12. String sMsg = "";
    13. if (iWert <= 0 ) {
    14. sMsg = "bitte keine neg. Zahlen eingeben \n";
    15. }
    16. else {
    17. for (int i = 2; i <= iWert; i++ ) {
    18. iZahl *= i;
    19. }
    20. sMsg = "Die Fakultät der eingegebenen ist: " + iZahl;
    21. }
    22. return sMsg;
    23. }
    24. static int getZahl(int n){
    25. Scanner sc = new Scanner( System.in );
    26. System.out.print ( "Zahl eingeben: " );
    27. int iWert = sc.nextInt();
    28. return n;
    29. }
    30. }
    Alles anzeigen


    Problem hier ist allerdings, dass er den Initialwert von "n" auch weiterverarbeitet und nicht auf das User Input achtet.
    Versteht ihr / verstehst du mein Gedankengang?

    Ich brauche einfach einen Methodenaufruf, der nicht an irgendwelche Parameter gebunden ist. Vielleicht kommen ja auch meine Returnwerte durcheinander?!

    ciao
  • kingele schrieb:

    ähh klar, wurde natürlich korrekt deklariert!
    So sieht mein Code aus, bzw habe ich es mir gedacht:

    Quellcode

    1. import java.util.Scanner;
    2. public class fakultaet_mit_methode {
    3. public static void main(String[] args) {
    4. String sMsg = " ";
    5. int = 0;
    6. int iWert = getZahl(n);
    7. sMsg = fakultaet( iWert );
    8. System.out.println( sMsg );
    9. }
    10. static String fakultaet( int iWert ) {
    11. int iZahl = 1;
    12. String sMsg = "";
    13. if (iWert <= 0 ) {
    14. sMsg = "bitte keine neg. Zahlen eingeben \n";
    15. }
    16. else {
    17. for (int i = 2; i <= iWert; i++ ) {
    18. iZahl *= i;
    19. }
    20. sMsg = "Die Fakultät der eingegebenen ist: " + iZahl;
    21. }
    22. return sMsg;
    23. }
    24. static int getZahl(int n){
    25. Scanner sc = new Scanner( System.in );
    26. System.out.print ( "Zahl eingeben: " );
    27. int iWert = sc.nextInt();
    28. return n;
    29. }
    30. }
    Alles anzeigen


    Problem hier ist allerdings, dass er den Initialwert von "n" auch weiterverarbeitet und nicht auf das User Input achtet.
    Versteht ihr / verstehst du mein Gedankengang?

    Ich brauche einfach einen Methodenaufruf, der nicht an irgendwelche Parameter gebunden ist. Vielleicht kommen ja auch meine Returnwerte durcheinander?!

    ciao


    Ich muss ganz offen gestehen: Nein^^
    Ich weiß noch nicht so richtig was du vor hast.

    Also.. du willst den Initialwert von n auch weiterverarbeiten und nicht auf den User input achten.. ok.
    Wozu dann der Userinput?
    Warum legst du dir nicht einfach "int n=5" an und arbeitest damit, wenn du nicht auf den Input achten möchtest?
  • Du ich hab mir das jetzt nochmal anschaut und mir sind son paar Dinge aufgefallen:

    1. Schau mal in deine Main-Methode. Dort steht: int = 0;
    Wo isn der Name?^^ Du meinst vermutlich int n =0; ?

    2. Zum Punkt "er achtet nicht auf den User input" (diesmal hab ich auch richtig gelesen, mein letzter Post war natürlich schwachsinn aber ich lass ihn mal stehen).

    Quellcode

    1. static int getZahl(int n){
    2. Scanner sc = new Scanner( System.in );
    3. System.out.print ( "Zahl eingeben: " );
    4. int iWert = sc.nextInt();
    5. return n;
    6. }


    Schau mal, du übergibst ihm die integer variable n.
    Danach liest du in die integer Vairbla iWert den eingegebenen Wert, das heißt an n hat sich nichts geändert.
    Nun gibst n zurück, der ja immernoch den selben Wert trägt wie am Anfang.

    Nun also die Frage: Wozu übergibst du einen Wert, der nicht gebraucht wird?

    Richtiger wäre doch:

    Quellcode

    1. static int getZahl(){
    2. Scanner sc = new Scanner( System.in );
    3. System.out.print ( "Zahl eingeben: " );
    4. int iWert = sc.nextInt();
    5. return iWert;
    6. }


    Du brauchst n int getZahl() (bzw. eigentlich überall) nicht. Du gibst einfach nur die Eingabe des Benutzers zurück.

    Hier mal dein Code etwas berichtigt:

    Quellcode

    1. import java.util.Scanner;
    2. public class fakultaet_mit_methode {
    3. public static void main(String[] args) {
    4. String sMsg = " ";
    5. int n = 0;
    6. int iWert = getZahl();
    7. sMsg = fakultaet( iWert );
    8. System.out.println( sMsg );
    9. }
    10. static String fakultaet( int iWert ) {
    11. int iZahl = 1;
    12. String sMsg = "";
    13. if (iWert <= 0 ) {
    14. sMsg = "bitte keine neg. Zahlen eingeben \n";
    15. }
    16. else {
    17. for (int i = 2; i <= iWert; i++ ) {
    18. iZahl *= i;
    19. }
    20. sMsg = "Die Fakultät der eingegebenen ist: " + iZahl;
    21. }
    22. return sMsg;
    23. }
    24. static int getZahl(){
    25. Scanner sc = new Scanner( System.in );
    26. System.out.print ( "Zahl eingeben: " );
    27. int iWert = sc.nextInt();
    28. return iWert;
    29. }
    30. }
    Alles anzeigen


    Hoffe es hilft :)
    Und achte darauf, dass Klassen in Java groß geschrieben werden :)

    Gruß

    Thimo
  • yeah it works!

    Danke. ich wusste nicht, dass ich eine Funktion auch ohne Parameter starten kann.
    zu 1.) War nur ein Fehler meinerseits, der beim hin und her kopieren von Code entstanden ist und
    zu 3.) mhh, das hat mir mein schlaues Buch aber noch nicht gesagt, aber getter Methoden werden dennoch klein geschrieben, oder?


    Vielen Dank noch mal!

    ciao