2012-04-05 7 views
-5
import java.util.Random; 

public class knife { 

    static Random randGen = new Random(); 
    public static void main(String[] args) { 

      int kniferpd = 1; 
      int knifebullet = 0; 

      int charstrength = 10; 
      int charlightcc = 10; 

      int hit = randGen.nextInt(10) + 1 + charlightcc; 
      int crit = randGen.nextInt(100) + 1 + charlightcc; 
      int knifedmg = randGen.nextInt(5) + 6; 

      if (hit < 10) 
      System.out.println("You missed!"); 
      else if (hit > 10 && crit > 98); 
      System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 
      else if (hit > 10 && crit < 98); 
      System.out.println("Strike of " + knifedmg + "dmg."); 

      { 

    } 
} 
} 

Lorsque j'ai écrit ce code, je reçois l'erreur ci-dessous, je ne sais pas ce qui ne va pas! Ceci est mon erreur, ils apparaissent sur le "else if" dans le bas.Ma commande "else if" ne fonctionne pas.

Erreur de syntaxe sur jeton "else", alors que prévu

+0

indente votre code, il sera le rendre plus lisible. Et c'est une bonne idée de toujours utiliser des accolades pour les déclarations conditionnelles et les boucles, une question d'assurance de qualité. – Snicolas

+0

Personnellement, j'aime à peu près omettre les accolades dans certains cas, car je pense qu'ils sont tout simplement superflue visuelle fouillis (dans certains cas). Cependant, les [conventions de codage Java] officielles (http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html#449) exigent que les accolades soient toujours utilisées pour les instructions if. Par conséquent, je tiens toujours mes ifs, même si parfois je me sens un besoin d'omettre les accolades. – Alderath

+0

comme sidenote, int hit = randGen.nextInt (10) + 1 + charlightcc; se traduira toujours par des hits si vous utilisez charlightcc de 10, pas sûr que ce soit le comportement prévu – Peter

Répondre

2

Retirez le ; après si les déclarations

Est-ce que ce

if (hit < 10) 
    System.out.println("You missed!"); 
else if (hit > 10 && crit > 98) 
    System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 
else if (hit > 10 && crit < 98) 
    System.out.println("Strike of " + knifedmg + "dmg."); 

ou que

if (hit < 10) { 
    System.out.println("You missed!"); 
} 
else if (hit > 10 && crit > 98) { 
    System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 
} 
else if (hit > 10 && crit < 98) { 
    System.out.println("Strike of " + knifedmg + "dmg."); 
} 
+0

Oh! Je comprends! Je n'ai pas compris que vous vouliez que je supprime tout le 's! Je vous remercie! – Emil

2

enlever ; de la fin de la ligne avec if

1

Juste une petite erreur ...

 if (hit < 10) 
      System.out.println("You missed!"); 
     else if (hit > 10 && crit > 98); // <-- No ; here 
      System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 
     else if (hit > 10 && crit < 98); // <-- No ; here 
      System.out.println("Strike of " + knifedmg + "dmg."); 

Juste pour votre compréhension, ce que vous avez écrit sera interprété comme ceci:

if (hit < 10) { 
    System.out.println("You missed!"); 
} else if (hit > 10 && crit > 98) { 
    ; // same as do nothing 
} 

System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 

else if (hit > 10 && crit < 98){ // compiler error 
    ; // same as do nothing 
} 

System.out.println("Strike of " + knifedmg + "dmg."); 
0

C'est pourquoi il est presque toujours mieux vaut utiliser {} for if, même si vous n'en avez pas strictement besoin. Si vous ajoutez le {}, il est évident ce qui se passe ..

Si nous reformater votre code un Litle:

import java.util.Random; 

public class knife { 

    static Random randGen = new Random(); 
    public static void main(String[] args) { 

      int kniferpd = 1; 
      int knifebullet = 0; 

      int charstrength = 10; 
      int charlightcc = 10; 

      int hit = randGen.nextInt(10) + 1 + charlightcc; 
      int crit = randGen.nextInt(100) + 1 + charlightcc; 
      int knifedmg = randGen.nextInt(5) + 6; 

      if (hit < 10) { 
       System.out.println("You missed!"); 
      } else if (hit > 10 && crit > 98); 

      System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 

      else if (hit > 10 && crit < 98); // this doesn't make sense 

      System.out.println("Strike of " + knifedmg + "dmg."); 

      { 

    } 
} 
} 

correctement Formaté avec des corrections

import java.util.Random; 

public class knife { 

    static Random randGen = new Random(); 
    public static void main(String[] args) { 

      int kniferpd = 1; 
      int knifebullet = 0; 

      int charstrength = 10; 
      int charlightcc = 10; 

      int hit = randGen.nextInt(10) + 1 + charlightcc; 
      int crit = randGen.nextInt(100) + 1 + charlightcc; 
      int knifedmg = randGen.nextInt(5) + 6; 

      if (hit < 10) { 
       System.out.println("You missed!"); 
      } else if (hit > 10 && crit > 98) {    
       System.out.println("Critical strike of " + knifedmg * 2 + "dmg."); 
      } else if (hit > 10 && crit < 98) {     
       System.out.println("Strike of " + knifedmg + "dmg."); 
      } 

    } 
} 
Questions connexes