2010-09-23 6 views
1

Je travaille avec des nombres entiers et j'essaie de faire des calculs qui impliquent des nombres décimaux aux parties. J'ai déjà utilisé cette même configuration auparavant et cela avait fonctionné mais pour une raison quelconque cela ne fonctionne pas.Entiers et calculs

package table.periodic; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemSelectedListener; 

public class Gram2mol extends Activity implements AdapterView.OnItemSelectedListener { 

private Spinner Spinner01; 
private TextView elementnumber; 
private EditText grams; 
private Button calculate; 
private TextView moles5; 

String[] element={"Actinium", "Aluminum", "Americium", 
     "Antimony", "Argon", "Arsenic", "Astatine", "Barium", 
     "Berkelium", "Beryllium", "Bismuth", "Bohrium", "Boron", 
     "Bromine", "Cadmium", "Calcium", "Californium", "Carbon", 
     "Cerium", "Cesium", "Chlorine", "Chromium", "Cobalt", 
     "Copernicium", "Copper", "Curium", "Darmstadtium", "Dubnium", 
     "Dysprosium", "Einsteinium", "Erbium", "Europium", "Fermium", 
     "Fluorine", "Francium", "Gadolinium", "Gallium", "Germanium", 
     "Gold", "Hafnium", "Hassium", "Helium", "Holmium", 
     "Hydrogen", "Indium", "Iodine", "Iridium", "Iron", 
     "Krypton", "Lanthanum", "Lawrencium", "Lead", "Lithium", 
     "Lutetium", "Magnesium", "Manganese", "Meitnerium", "Mendelevium", 
     "Mercury", "Molybdenum", "Neodymium", "Neon", "Neptunium", 
     "Nickel", "Niobium", "Nitrogen", "Nobelium", "Osmium", 
     "Oxygen", "Palladium", "Phosphorus", "Platinum", "Plutonium", 
     "Polonium", "Potassium", "Praseodymium", "Promethium", "Protactinium", 
     "Radium", "Radon", "Rhenium", "Rhodium", "Roentgenium", "Rubidium", 
     "Ruthenium", "Rutherfordium", "Samarium", "Scandium", "Seaborgium", 
     "Selenium", "Silicon", "Silver", "Sodium", "Strontium", "Sulfur", 
     "Tantalum", "Technetium", "Tellurium", "Terbium", "Thallium", "Thorium", 
     "Thulium", "Tin", "Titanium", "Tungsten", "Ununpentium", "Ununquadium", 
     "Ununtrium", "Uranium", "Vanadium", "Xenon", "Ytterbium", "Yttrium", "Zinc", 
     "Zirconium"}; 

public void onCreate(Bundle icicle){ 
    super.onCreate(icicle); 
    setContentView(R.layout.grams2moles); 

    elementnumber = (TextView) findViewById(R.id.elementnumber); 

    grams = (EditText) findViewById(R.id.grams); 

    calculate = (Button) findViewById(R.id.calculate); 
    calculate.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) {my_func01();}}); 

    Spinner spin = (Spinner) findViewById(R.id.elements); 
    spin.setOnItemSelectedListener((OnItemSelectedListener) this); 

    ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, element); 

    aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spin.setAdapter(aa); 
} 

void my_func01(){ 
    int grams2; 
    int elementnumber2; 
    int moles2; 

     grams2 = Integer.parseInt(grams.getText().toString()); 
     elementnumber2 = Integer.parseInt(elementnumber.getText().toString()); 

     moles2 = (grams2 * (1/elementnumber2)); 

     moles5.setText("" + moles2); 
    } 

    public void setSpinner01(Spinner spinner01) { 
     Spinner01 = spinner01; 
    } 

    public Spinner getSpinner01() { 
     return Spinner01; 
    } 

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) 
    { 

    if ("Actinium".equals(element[position])) 
    {elementnumber.setText("227");} 

    if ("Aluminum".equals(element[position])) 
    {elementnumber.setText("26.981538");} 

    if ("Americium".equals(element[position])) 
    {elementnumber.setText("243");} 

    if ("Antimony".equals(element[position])) 
    {elementnumber.setText("121.760");} 

    if ("Argon".equals(element[position])) 
    {elementnumber.setText("39.948");} 

    if ("Arsenic".equals(element[position])) 
    {elementnumber.setText("74.9216");} 

    if ("Astatine".equals(element[position])) 
    {elementnumber.setText("210");} 

    if ("Barium".equals(element[position])) 
    {elementnumber.setText("137.327");} 

    if ("Berkelium".equals(element[position])) 
    {elementnumber.setText("247");} 

    if ("Bismuth".equals(element[position])) 
    {elementnumber.setText("208.9804");} 

    if ("Bohrium".equals(element[position])) 
    {elementnumber.setText("264");} 

    if ("Boron".equals(element[position])) 
    {elementnumber.setText("10.811");} 

    if ("Bromine".equals(element[position])) 
    {elementnumber.setText("79.904");} 

    if ("Cadmium".equals(element[position])) 
    {elementnumber.setText("112.41");} 

    if ("Calcium".equals(element[position])) 
    {elementnumber.setText("40.078");} 

    if ("Californium".equals(element[position])) 
    {elementnumber.setText("251");} 

    if ("Carbon".equals(element[position])) 
    {elementnumber.setText("12.0107");} 

    if ("Cerium".equals(element[position])) 
    {elementnumber.setText("140.116");} 

    if ("Cesium".equals(element[position])) 
    {elementnumber.setText("132.90545");} 

    if ("Chlorine".equals(element[position])) 
    {elementnumber.setText("35.453");} 

    if ("Chromium".equals(element[position])) 
    {elementnumber.setText("51.996");} 

    if ("Copper".equals(element[position])) 
    {elementnumber.setText("63.546");} 

    if ("Curium".equals(element[position])) 
    {elementnumber.setText("247");} 

    } 

    public void onNothingSelected(AdapterView<?> arg0) { 
     elementnumber.setText("227"); 
    } 

}

mon erreur est ce

09-22 20:02:58.353: ERROR/AndroidRuntime(17745): Uncaught handler: thread main exiting due to uncaught exception 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745): java.lang.NullPointerException 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at table.periodic.Gram2mol.my_func01(Gram2mol.java:77) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at table.periodic.Gram2mol$1.onClick(Gram2mol.java:56) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.View.performClick(View.java:2364) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.View.onTouchEvent(View.java:4179) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.widget.TextView.onTouchEvent(TextView.java:6592) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.View.dispatchTouchEvent(View.java:3709) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1695) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1116) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.app.Activity.dispatchTouchEvent(Activity.java:2068) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1679) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1697) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.os.Looper.loop(Looper.java:123) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at android.app.ActivityThread.main(ActivityThread.java:4568) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
09-22 20:02:58.513: ERROR/AndroidRuntime(17745):  at dalvik.system.NativeStart.main(Native Method) 

ligne 77 est le "moles5.setText (" "+ moles2);"

Je ne crois pas que je me mêle d'identifiant, donc je ne m'inquiète pas pour ça et ça ne semble pas être ce genre d'erreur. Si quelqu'un a des idées faites le moi savoir. Merci.

Répondre

0

Il semble que vous n'êtes pas instanciation la variable moles5. S'il y a un TextView dans votre fichier layout/grams2moles.xml avec un id de moles5, vous instancierez dans onCreate() en appelant

moles5 = (TextView) findViewById(R.id.moles5); 
+0

Ok. Merci. Je n'ai pas réalisé cela. Je l'ai fait un peu ces derniers temps. Je l'ai tout fonctionne maintenant. –

0

moles5 est la seule chose sur cette ligne qui peut être nulle. Vous ne pouvez pas obtenir un pointeur nul sur un type primitif. Il ne semble pas que vous initialisez moles5 n'importe où cependant.

En outre, une meilleure façon d'imprimer un nombre est de dire Integer.toString(moles2);

+0

Merci. J'ai dû changer en double cependant. Je ne pouvais pas le faire fonctionner en utilisant des entiers, mais je garderai cela à l'esprit. Merci. –

+0

Ah, ok .. avec les doubles, vous pourriez envisager d'utiliser un DecimalFormat à la place afin de pouvoir contrôler combien de points décimaux sont affichés, etc. En fait cela fonctionne également pour les entiers, si vous voulez afficher 1000 au lieu de 1000. http : //download-llnw.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html –