2014-11-04 70 views
1

我將以我對Java非常新的陳述開頭提出我的問題,所以如果我的代碼完全令人厭惡,請致以道歉。我是否從我的方法中返回了正確的值,並且我正確寫入了它?

我在做什麼:我正在編寫一個程序,它接受來自用戶的兩個整數,一個低值和一個高值,並將這兩個整數發送給兩種不同的方法。方法#1有一個簡單的for循環,並且應該打印出3或5的倍數最小的數字和最大的數字之間的所有數字,而方法#2除了3或5倍數的數字以外還會檢查這個數字是否也是6的倍數,如果是,它會在旁邊打印數字和星號。

我遇到了什麼問題:我非常難以理解我需要從我的方法返回的內容&如何返回任何東西。這是我第一次正確地使用一種方法(剛剛從「Hello World」中移出),並且從我所看到的我根本不需要返回任何東西。所有我放入我的代碼。方法非常完整的計劃,所以我想也許回來時,我發就足夠了整數,顯然它不是那麼,事不宜遲,這裏是我的代碼

的錯誤:

javac BonusQ.java 
.\MethodOne.java:19: error: illegal start of type 
       return(int lowestRange, int highestRange); 
       ^
.\MethodTwo.java:36: error: illegal start of type 
       return(int lowestRange, int highestRange); 
       ^

The Main:

import java.util.Scanner; 

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

       int lowestRange = 0; 
       int highestRange = 0; 

       System.out.println("Enter the lowest integer in your range"); 
       lowestRange = scan.nextInt(); 

       System.out.println("Enter the highest integer in your range"); 
       highestRange = scan.nextInt(); 

       MethodOne.NoAsterisk(lowestRange, highestRange); 
       MethodTwo.Asterisk(lowestRange, highestRange); 

     } 
} 

MethodOne:

public class MethodOne 
{ 
     public static int NoAsterisk(int lowestRange, int highestRange) 
     { 
       for(int i = lowestRange; i <= highestRange; i++) 
       { 
         if (i%5 == 0) 
         { 
         System.out.println(i); 
         } 
         else if (i%3 == 0) 
         { 
         System.out.println(i); 
         } 
       } 

     } 

     return(int lowestRange, int highestRange); 

} 

MethodTwo:

public class MethodTwo 
{ 
     public static int Asterisk(int lowestRange, int highestRange) 
     { 
       for(int i = lowestRange; i <= highestRange; i++) 
       { 
         if (i%5 == 0) 
         { 
           if (i%5 == 0 && i%6 == 0) 
           { 
           System.out.println(i + "*"); 
           } 
           else 
           { 
           System.out.println(i); 
           } 
         } 
         else if (i%3 == 0) 
         { 
           if (i%3 == 0 && i%6 == 0) 
           { 
           System.out.println(i + "*"); 
           } 
           else 
           { 
           System.out.println(i); 
           } 
         } 


       } 


     } 

     return(int lowestRange, int highestRange); 
} 

很抱歉,如果帖子是有點結實的閱讀,我只是覺得,添加的代碼我的想法可能會幫助你解釋我怎麼了,看到你可能不知道我的無能的程度:)

在此先感謝。

回答

0

你不需要返回任何東西,因爲方法是打印出所有的值。

你可以改變它們變成無效的方法,例如:

public static void asterisk(int lowest, int highest) { 
    //loops and if statements 

    //no return statement! 
} 

的代碼在方法運行,瞧,你做!

編輯:這就是說,有很多可以做更多的Java代碼,但現在這將工作。

+0

謝謝!這就像每次我在這裏問一個問題都是我需要改變的一件事情,我可能會很快限制我的問題:( – notywq 2014-11-04 20:21:35

+0

不客氣,只是很好,他們可能會讓你留下:) – yts 2014-11-04 20:24:33

0

mmmmm ...你可以返回類型,和(int lowestRange,int highestRange)它不是一個類型。看方法定義

public static int Asterisk(int lowestRange, int highestRange) 

返回類型被聲明爲int,所以你應該返回一個int值。你可以做類似

return lowestRange; 
return 1; 

考慮到這一點,錯誤應該消失。問題是,爲什麼你需要返回一個值?從我讀過的東西,你的方法是打印東西,而不是回報的東西...

+1

好......此外,return語句是梅託德定義之外,也不會工作... – 2014-11-04 20:01:39

+0

當我刪除單詞「迴歸」我得到一個錯誤說「錯誤:缺少return語句」,所以我假設我必須有一個,有沒有一種特定的方式不返回任何東西? 編輯:出於某種原因,錯誤只顯示MethodOne而不是MethodTwo當我刪除返回語句,任何想法? – notywq 2014-11-04 20:06:17

+0

是的,return語句應該在方法內部,這就是爲什麼編譯器聲稱缺少... – 2014-11-04 20:21:09

1

好的,類有成員。

成員是一些變量或變量數組 和一個類的方法。

所以你有

public class MyMethod 
{ 

    public static int Asterisk(int loRange, int hiRange) 
     { 
      // Do magic let's make a sum for this example 

      // You enter loRange and hiRange (you defined it above) 


      return loRange + hiRange // Here the method returns a result 

     } 
} 

// So then.... 

public static void main(String [] args) 
     { 
      // WHATEVER IS IN HERE RUNS ALWAYS FIRST. 
      z = Asterisk(1,2); // 1 and 2 is lo and hi range values ;) 
      // Z has a value of 3 now because Asterisk(1,2) returns 1 + 2 
     } 

看到這是如何工作的? 現在這個工作是因爲你使用了靜態定義(這意味着不能有一個MyMethod實例被創建爲首先使用該方法,這並沒有錯,但是如果你可以讓一個程序對類實例進行處理,那麼最好這樣做

您使用特殊的方法創建了一個類的實例,稱爲對象,該方法具有類的確切名稱並構造它的一個實例 您應該研究關於構造函數,抽象類等等等等

我不能說你做錯了或者是正確的,它是關於程序的全部內容,你應該研究變量和方法的範圍以及面向對象編程的封裝概念 僅使用靜態方法,違背封裝原則,可能是錯誤的,但我無法確定。

我希望這對你有所幫助,併爲你繼續學習提供了一個很好的方向。

PS: 要返回多個結果,您應該返回一個變量數組,而不僅僅是一個變量。 你也可以不返回任何東西,只需要把它做到需要的數組。這迫使你讓這個數組公開。 (不是一個好的做法)

最後,如果需要多個值返回才能將它們打印在控制檯上......那麼,只需在該方法中執行此操作,無需真正返回任何內容。

+1

謝謝!我結束了沒有返回任何東西,我認爲對象是我的編程冒險的下一步,所以再次感謝您的評論:) – notywq 2014-11-04 20:26:30

+0

yts回覆您刪除的「太多的信息,我不回答他的問題「(爲什麼你刪除它? 」我正確地寫作了嗎?「 原始問題的這一部分是我努力引導這個人理解的東西。有時候,許多信息比指導一個人如何做某事更好錯誤的方式,你不這麼認爲嗎?你的回答可能會受到影響,但它會引導他不關心範圍,並且總是在方法中使用靜態方法,這會導致意大利麪條代碼,什麼都不返回是錯誤的,但有時它是 – 2014-11-04 20:26:52

+0

這不是錯誤的方式,在他/她的學習中,這是可以接受的方式,太多的信息會讓人困惑, (關於刪除..這是有點苛刻,所以我把它拿走之前,我看到你的迴應) – yts 2014-11-04 20:31:57

-2

返回語句不在方法中。你必須把它們放在方法括號之前。

public class MyClass{ 
    public int sum (int a, int b){ 
     return a + b; 
    } // The return have to be before this brackets 
}