Waarom wordt deze code niet uitgevoerd?

Ultra java noob hier, ik weet zeker dat het waarschijnlijk een dwaze fout is. Sommigen willen me corrigeren?

public class Test1 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
   //TODO code application logic here
int n = 4;

public void f(int n){
 System.out.print(n);
 if(n<=1)
  return;
  else{
      f(n/2);
      f(n/2);
      }
   }
 }

Ik krijg deze foutmelding:

Exception in thread "main" java.lang.RuntimeException:
Uncompilable source code - illegal start of expression at the
public void f(int n)
0
Sla accolades niet over, want u kunt - altijd beugels gebruiken. Voeg daarom een ​​paar toe aan het eerste deel van uw if -clausule. Het zorgt voor meer leesbare code. Ook is de inspringing ongelijk: zorg dat elke { uitgelijnd is met de bijbehorende } .
toegevoegd de auteur halfer, de bron
Hint: tel het aantal { tekens en het aantal } tekens. Ze zouden hetzelfde moeten zijn.
toegevoegd de auteur Hot Licks, de bron
Omdat u een syntaxisfout hebt, die de compiler moet aangeven wanneer u deze probeert te compileren.
toegevoegd de auteur Oliver Charlesworth, de bron
het verwijst naar de methode die ik probeer uit te voeren ... Uitzondering in thread "main" java.lang.RuntimeException: Uncompilable source code - illegale start van expressie op de openbare ongeldige f (int n) regel
toegevoegd de auteur user1477348, de bron

4 antwoord

De structuur moet een beetje anders zijn, probeer deze aanpak:

public class Test {

    public static void main(final String[] args) {
        f(4);
    }

    public static void f(final int n) {
        System.out.print(n);
        if (n <= 1) {
            return;
        } else {
            f(n/2);
            f(n/2);
        }
    }
}
3
toegevoegd

U kunt methoden niet binnen methoden in Java declareren. U mist een } ergens vóór public void f (int n) .

3
toegevoegd

Doe dit:

public static void main(String[] args)
{
   //TODO code application logic here
    int n = 4;

    f(n);  
}

public void f(int n)
{
    System.out.print(n);

    if( n <= 1)
    {
      return;
    }
    else
    {
        f(n/2);
    }
}
1
toegevoegd
Ja, want er is geen instantie.
toegevoegd de auteur Hot Licks, de bron
Omdat u de methode f moet gebruiken, moet u een instantie van de klasse die deze declareert, een instantie geven. Als je het statisch maakt, is dat niet nodig.
toegevoegd de auteur Leniel Macaferi, de bron
dat geeft me een fout, maar als ik het verander in een statische methode dan is het goed ... een reden waarom?
toegevoegd de auteur user1477348, de bron

Omdat voor de compiler uw code er zo uitziet

public class Test1 {

    public static void main(String[] args) {
        int n = 4;


        public void f(int n) {
            System.out.print(n);
            if (n <= 1)
                return;
            else {
                f(n/2);
                f(n/2);
            }
        }
    }

dus het heeft 2 fouten

1) u probeert methode in methode te maken ( f binnen hoofd )

2) geen } aan het einde van de les

0
toegevoegd