2016-09-11 1 views
-1

J'essaie d'écrire un programme (pour une affectation) qui, selon deux paramètres absolus, déterminera si quelqu'un sera admissible à un soutien financier. Pour accomplir ceci j'ai créé trois nouvelles méthodes, et actuellement je suis en panne à 1 erreur que je ne peux tout simplement pas comprendre. L'erreur dit "identifiant prévu" sur cette partie du code (dans le fond:Nouvelle méthode, <identifier> erreur prévue

static void metodeTekst (tekst)

Voici mon code:

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); 
    } 
} 

J'ai essayé une bon moment pour trouver une réponse en ligne, mais dans la plupart des cas où les gens ont eu cette erreur ils ont oublié d'écrire une méthode principale.Je n'ai pas, comme vous le voyez.Merci d'avance - je suis vraiment nouveau à Java, et apprécie tout help

+0

'tekst' devrait avoir un type, par ex. 'String tekst'. (Ou être enlevé tout à fait car il n'est pas utilisé.) – Biffen

Répondre

1

Votre méthode metodeTekst est incorrecte. t devrait être soit

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

ou

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

mais vous devez l'appeler comme ceci:

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

Modifier pour le commentaire OP:

Il y a beaucoup de des problèmes supplémentaires avec votre code. La variable i dans metodeAlder et metodeHjemme est à l'extérieur si la portée de i est initialement définie (dans main). Si vous avez vraiment besoin de modifier cette variable dans vos méthodes, vous devez le déclarer comme un champ static en dehors de votre champ principal.

En outre, après tout compile bien, cette partie

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

est inutile. Vous allez vous retrouver dans une boucle sans fin puisque vous ne changez jamais i alors ce sera toujours < 2. Je voudrais supprimer toutes les occurrences de i car il ne fait aucune signification et n'est pas du tout nécessaire dans votre programme.

Edit 2:

Pour votre question de savoir pourquoi le compilateur ne se plaint maintenant de i: Il a d'abord vérifié si toutes vos signatures de méthode étaient correctes. Comme il a rencontré l'erreur précédente (avec la mauvaise signature), il n'a pas besoin de vérifier plus loin. Maintenant que vous l'avez corrigé, le compilateur pourrait continuer à vérifier la syntaxe "à l'intérieur" des méthodes. Et puisque i est seulement défini à l'extérieur des étendues de la méthode, il ne savait pas ce que i est censé être, d'où l'erreur suivante du compilateur.

Edit 3:

Pour rendre mon explication plus claire oeil à l'exemple suivant:

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

Ici, les trois portées internes A, B, C sont isolées les unes des autres.Ainsi, les variables définies dans la portée interne A ne sont pas visibles par les autres étendues internes B et C. En revanche, les variables définies dans la portée externe sont visibles pour toutes les étendues internes, car elles font également partie de la portée externe.

+0

Merci! J'ai essayé la dernière méthode maintenant, résolu le problème initial. Cependant, maintenant le compilateur se plaint qu'il ne peut pas trouver le symbole i ++; dans l'un de ses endroits. Y a-t-il une bonne raison pour laquelle je ne l'ai pas eue plus tôt, et pourquoi je l'obtiens maintenant? Pour autant que je comprenne, j'ai déclaré i dans la méthode principale - le programme ne devrait-il pas pouvoir y accéder dans les autres méthodes? –

+0

Ah, d'accord. Je vois. Mais j'aurai besoin d'une forme de compteur pour m'assurer que le programme n'imprime que la dernière ligne en main une fois certaines exigences remplies. Est-ce qu'un I ++ n'est pas le meilleur moyen de le faire, en combinaison avec une boucle while? –

+0

Un 'while'-loop est certainement le chemin à parcourir ici, mais pour le moment, votre boucle ne fait absolument rien et continuera pour toujours. Vos deux méthodes ne seront jamais appelées puisqu'elles viennent après la boucle while. Vous devez mettre votre logique ** entière ** (c'est-à-dire demander la saisie de l'utilisateur et vérifier la validité) dans votre boucle while. Ensuite, si les deux conditions que vous voulez vérifier sont remplies, vous pouvez sortir de votre boucle. – QBrute