2016-09-11 64 views
-1

我正在嘗試編寫一個程序(對於任務),它將根據兩個絕對參數確定是否有人有資格獲得財務支持。爲了達到這個目的,我創建了三種新的方法,目前我的錯誤是我無法理解的。錯誤說「標識預期」的這部分代碼(在底部:新方法,<identifier>預期錯誤

靜態無效metodeTekst(tekst)

這裏是我的代碼:

import java.util.Scanner; 

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

     System.out.println(); 
    System.out.println("\r\n" + "For aa kunne beregne ditt stoettegrunnlag, må du oppgi alderen din: "); 
    tastatur = in.nextLine(); 
    int alder = Integer.parseInt(tastatur); 
     System.out.println(); 
    System.out.println("\r\n" + "Bor du hjemme? Skriv 1 for «Ja», eller 2 for «Nei»: "); 
    tastatur = in.nextLine(); 
    int hjemme = Integer.parseInt(tastatur); 
     System.out.println(); 


    int i = 0; 

    while (i < 2) 
    { 
     i = i + 0; 
    } 

    metodeAlder(alder); 
    metodeHjemme(hjemme); 

    System.out.println("Du vil faa full studiestoette!"); 

    } 
    static void metodeAlder(int alder) 
    { 
    if (alder <= 18 || alder >= 45) 
     i++; 

    else 
     metodeTekst(tekst); 
    } 
    static void metodeHjemme(int hjemme) 
    { 
    if (hjemme == 2) 
     i++; 

    else 
     metodeTekst(tekst); 

    } 
    static void metodeTekst(tekst) 
    { 
    String tekst = ("Du vil faa redusert eller ingen studiestoette."); 
    System.out.println(tekst); 
    } 
} 

我已經試過了在網上找到答案的好時機,但是在大多數情況下,人們已經發現了這個錯誤,他們忘記了編寫一個主要的方法,我沒有,如你所見,先謝謝了 - 我對Java真的很陌生,並且很感激所有人幫助!

+0

'tekst'應該有一個類型,例如, '字符串tekst'。 (或者因爲沒有使用而被徹底刪除。) – Biffen

回答

1

您的方法metodeTekst是錯誤的。 T應當要麼是

static void metodeTekst() 
{ 
    String tekst = "Du vil faa redusert eller ingen studiestoette."; 
    System.out.println(tekst); 
} 

static void metodeTekst(String tekst) 
{ 
    System.out.println(tekst); 
} 

但你必須要這樣稱呼它:

metodeTekst("Du vil faa redusert eller ingen studiestoette."); 

編輯爲OP的評論:

有許多您的代碼存在其他問題。 metodeAldermetodeHjemme中的變量i位於i最初定義的範圍之外(在main中)。如果您確實需要在您的方法中更改此變量,則必須將其聲明爲您的main之外的static字段。

除了後一切編譯罰款,這部分

while (i < 2) 
{ 
    i = i + 0; 
} 

是毫無意義的。因爲你永遠不會改變i,所以它永遠是< 2,你將最終陷入無限循環。我會刪除所有出現的i,因爲它沒有任何意義,在您的程序中根本不需要。

編輯2:

對於你的問題,爲什麼編譯器現在才抱怨i:它首先檢查,如果你的所有方法簽名是正確的。由於它遇到以前的錯誤(錯誤簽名),因此無需進一步檢查。現在您已經修復了它,編譯器可以繼續檢查方法內部的語法。由於i只是定義在方法範圍之外,因此它不知道i應該是什麼,因此是下一個編譯器錯誤。

編輯3:

要在下面的例子中我的解釋更清晰的外觀:

{ 
    // Outer Scope 
    { 
     // Inner Scope A 
    } 
    { 
     // Inner Scope B 
    } 
    { 
     // Inner Scope C 
    } 
} 

這裏,三個內部範圍A, B, C彼此隔離。因此,內部範圍A中定義的變量對其他內部示波器BC不可見。相比之下,外部範圍中定義的變量對所有內部範圍都是可見的,因爲它們也是外部範圍的一部分。

+0

謝謝!現在嘗試後一種方法,解決了最初的問題。然而,現在編譯器抱怨它找不到符號i ++;在任何地方。有沒有什麼好的理由,爲什麼我沒有早點得到這個,爲什麼我現在得到它?據我瞭解,我已經宣佈我在主要方法 - 不應該程序能夠訪問它在其他方法呢? –

+0

啊,好的。我懂了。但是我需要某種形式的計數器來確保程序只在滿足某些要求時纔打印最後一行。是不是一個我++ - 計數器最好的方式來做到這一點,結合一個while循環? –

+0

一個'while'''''''''''''''''''''''''''''''當然,這是一條可以走到這裏的路,但是現在,由於它們來自while循環之後,您的兩個方法將永遠不會被調用。你必須把你的**整個邏輯(即詢問用戶輸入和檢查有效性)放到你的while循環中。然後,如果您想要檢查的兩種情況都得到滿足,則可以從循環中「暫停」。 – QBrute