2012-11-05 8 views
-1

J'ai un code qui fonctionnait plus tôt et qui semble maintenant lancer quelques erreurs en ce qui concerne une déclaration de cas que j'ai pour un événement de bouton. La structure du cas regarde quel bouton est cliqué et fait quelque chose et c'est le second cas qui m'aggrave. L'erreur dans Eclipse sur la ligne qui dit cas R.id.button2: me dit "erreur de syntaxe sur jeton" cas ", @ attendu" et sur la ligne ci-dessous (intention), il est dit "erreur de syntaxe, insérer" "pour compléter l'affirmation". Cependant, il semble que les messages d'erreur changent constamment. Plus tôt, Eclipse me harcelait pour mettre un ";" au lieu d'un @ et je ne sais pas pourquoi puisque le code était bien plus tôt. J'ai essayé de mettre ";" après le colon dans la deuxième ligne case et jette encore une erreur. Je ne sais pas pourquoi cela se produit tout à coup ou pourquoi les messages d'erreur changent constamment, malgré le fait de taper ce qu'il veut (ce qui fixe généralement les choses dans Eclipse). Ai-je manqué quelque chose dans ma structure de cas? Merci.Erreur de syntaxe en Java

Voici mon code (affichage en pleine):

import java.text.DecimalFormat; 
import java.text.NumberFormat; 

import android.R.integer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View; 


public class MainActivity extends Activity { 
EditText mile,diesel; 
Button button1, button2; 
TextView tv, tv2, tv3; 
private double x, y, z, costper, gallon, litres, ophours, ophour, drive, stopdrive; 
CheckBox checkBox1, checkBox2, checkBox3, checkBox4; 
NumberFormat format = NumberFormat.getCurrencyInstance(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mile= (EditText) findViewById(R.id.mile); 
    checkBox1 = (CheckBox) findViewById(R.id.checkBox1); 
    checkBox2 = (CheckBox) findViewById(R.id.checkBox2); 
    checkBox3 = (CheckBox) findViewById(R.id.checkBox3); 
    checkBox4 = (CheckBox) findViewById(R.id.checkBox4);   
    button1 = (Button) findViewById(R.id.button1); 
    button2 = (Button) findViewById(R.id.button2); 
    button1.setOnClickListener(onClickListener); 
    button2.setOnClickListener(onClickListener); 
    tv = (TextView) findViewById(R.id.cost); 
    tv2 = (TextView) findViewById(R.id.cpm); 
    tv3 = (TextView) findViewById(R.id.gallons); 
    diesel= (EditText) findViewById(R.id.diesel); 
     } 

private OnClickListener onClickListener = new OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
     switch(v.getId()){ 
     case R.id.button1: 
      x=Double.parseDouble(mile.getText().toString()); 
      y=Double.parseDouble(diesel.getText().toString()); 
      ophour = x/55; 
      ophours = 0; 
      if (ophour>10){ 
       drive = ophour/10; 
       if (drive>1) { 
        stopdrive = drive-1; 
        ophour = ophour + 10; 
        if (stopdrive>1); 
        ophour = ophour + (10*stopdrive); 
        if (stopdrive<1); 
        ophour = ophour + 10; 
       } 
            } 
       ophours = ((x/55)*10); 
      } 
      if (checkBox2.isChecked()) { 
       x=x*2; 
      } 
      if (checkBox1.isChecked()) { 
       x=x*0.62137; 
      } 
      gallon = x/5.5; 
      if (checkBox4.isChecked()) { 
       gallon = gallon + (ophour*1.1); 
      } 
      if (checkBox3.isChecked()) { 
       litres = gallon*3.785; 
       tv3.setText(new DecimalFormat("####.##").format(litres)+"L"); 
      } 
      z=(gallon*y)+(x*0.655); 
      costper=z/x; 
      tv.setText(format.format(z)); 
      tv2.setText(format.format(costper)+"/mile"); 
      tv3.setText(new DecimalFormat("####.##").format(gallon)+"gal."); 
     break; 
     case R.id.button2: 
      Intent browserIntent = 
      new Intent(Intent.ACTION_VIEW, Url.parse("http://www.google.com")); 
           startActivity(browserIntent); 
     break; 
     } 
    ;};}   

Répondre

4

Votre {} s sont tout simplement incompatibles. Ceci est un excellent exemple de pourquoi il est important de correctement formater votre code, y compris l'indentation.

J'ai pris le temps de le faire pour vous, mais vous pouvez le faire dans Eclipse en utilisant contrôle + Maj +F:

import java.text.DecimalFormat; 
import java.text.NumberFormat; 

import android.R.integer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View; 

public class MainActivity extends Activity { 
    EditText mile,diesel; 
    Button button1, button2; 
    TextView tv, tv2, tv3; 
    private double x, y, z, costper, gallon, litres, ophours, ophour, drive, stopdrive; 
    CheckBox checkBox1, checkBox2, checkBox3, checkBox4; 
    NumberFormat format = NumberFormat.getCurrencyInstance(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mile= (EditText) findViewById(R.id.mile); 
     checkBox1 = (CheckBox) findViewById(R.id.checkBox1); 
     checkBox2 = (CheckBox) findViewById(R.id.checkBox2); 
     checkBox3 = (CheckBox) findViewById(R.id.checkBox3); 
     checkBox4 = (CheckBox) findViewById(R.id.checkBox4);   
     button1 = (Button) findViewById(R.id.button1); 
     button2 = (Button) findViewById(R.id.button2); 
     button1.setOnClickListener(onClickListener); 
     button2.setOnClickListener(onClickListener); 
     tv = (TextView) findViewById(R.id.cost); 
     tv2 = (TextView) findViewById(R.id.cpm); 
     tv3 = (TextView) findViewById(R.id.gallons); 
     diesel= (EditText) findViewById(R.id.diesel); 
    } 

    private OnClickListener onClickListener = new OnClickListener() { 
     @Override 
     public void onClick(final View v) { 
      switch(v.getId()){ 
       case R.id.button1: 
        x=Double.parseDouble(mile.getText().toString()); 
        y=Double.parseDouble(diesel.getText().toString()); 
        ophour = x/55; 
        ophours = 0; 
        if (ophour>10){ 
         drive = ophour/10; 
         if (drive>1) { 
          stopdrive = drive-1; 
          ophour = ophour + 10; 
          if (stopdrive>1); // This IF statement will ALWAYS execute; remove the ";" 
           ophour = ophour + (10*stopdrive); 
          if (stopdrive<1); // This IF statement will ALWAYS execute; remove the ";" 
           ophour = ophour + 10; 
         } 
        } 
        ophours = ((x/55)*10); 
        } // This should not be here 
        if (checkBox2.isChecked()) { 
         x=x*2; 
        } 
        if (checkBox1.isChecked()) { 
         x=x*0.62137; 
        } 
        gallon = x/5.5; 
        if (checkBox4.isChecked()) { 
         gallon = gallon + (ophour*1.1); 
        } 
        if (checkBox3.isChecked()) { 
         litres = gallon*3.785; 
         tv3.setText(new DecimalFormat("####.##").format(litres)+"L"); 
        } 
        z=(gallon*y)+(x*0.655); 
        costper=z/x; 
        tv.setText(format.format(z)); 
        tv2.setText(format.format(costper)+"/mile"); 
        tv3.setText(new DecimalFormat("####.##").format(gallon)+"gal."); 
        break; 
       case R.id.button2: 
        Intent browserIntent = 
        new Intent(Intent.ACTION_VIEW, Url.parse("http://www.google.com")); 
        startActivity(browserIntent); 
        break; 
      // There should be a "}" here. 
     }; 
    }; 
} 

Maintenant, j'ai ajouté 4 commentaires ici pour vous montrer les problèmes avec le code (bien que seulement 2 sont liés à ce problème).

  • Sur la ligne 62, il y a un } qui ne devrait pas être présent. Sur la ligne 88, il n'y a pas }, et il devrait y avoir. (Fin de switch.)
  • (non relié) En Ligne 55 à propos, vous avez une déclaration if qui sera toujours exécuter en raison de ;. Sur la ligne 57, vous avez une instruction if qui s'exécutera toujours en raison de ;.
+0

Je vois ce que j'ai fait de mal. Pour être honnête, je pensais mais mis; sur ceux si les déclarations lol. Pouah. Rien que le café ne peut réparer. Je me souviendrai du raccourci de format car, honnêtement, quand Eclipse commence à demander à mettre} et; sur une ligne pour le finir, c'est quand les choses commencent à lorgner gaiement. Merci de m'avoir montré comment gérer ça, Eric. – Shawner

+0

Pas de problème. Bonne chance! :) – Eric