2016-09-11 74 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