繁体   English   中英

添加不适用于Android

[英]Addition isn't working in Android

发生了一件非常奇怪的事。 我有一个应用程序来计算答案中的点数。 它运作得非常好,但由于我的本地化(对我的点数计算系统没有任何影响),它们没有被正确添加; 相反,它们像字符串一样添加。

2 + 4 + 5 = 245,之前是11 ......任何想法?

例:

            if(antworten.geo == 0)
            punktzahl += 10;
        else if(antworten.geo == 1)
            punktzahl += 8;
        else if(antworten.geo == 2)
            punktzahl += 4;

像这样我从旋转器得到答案

    public class geo_listener implements OnItemSelectedListener{
    private boolean i = false;
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
        if(i == true){
            antworten.geo_str = parent.getSelectedItem().toString();
            antworten.geo = parent.getSelectedItemPosition();
            Toast chosen = Toast.makeText(parent.getContext(), parent.getSelectedItem().toString(), Toast.LENGTH_SHORT);
            chosen.show();}
        else{
            i = true;
            antworten.geo = parent.getSelectedItemPosition();
        }
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
}

像这样,我正在定义所有这些变量和争论

    public class antworten{
    public static int rennen = 0; // 1 - Rennen 2 - Langsam
    public static String rennen_str;
    public static int next_item = 0;  //1 - Küchenmesser 2 - Pistole 3 - Stift 4 - Baseball-Schläger
    public static String next_item_str;
    public static int family = 0; // 1 - Ja  2 - Nein
    public static String family_str;
    public static int place = 0; // 1 - Straße 2 - Zuhause 3 - Arbeit 4 - Restaurant 5 - Öffentlicher Platz
    public static String place_str;
    public static int geo = 0; // 1 - Berg 2 - Meer 3 - Land
    public static String geo_str;
    public static int virus = 0; // 1 - Luft 2 - Speichel 3 - Blut 4 - Weiß nicht
    public static String virus_str;
    public static int walk = 0; //1 - Küchenmesser 2 - Pistole 3 - Stift 4 - Baseball-Schläger
    public static String walk_str;
    public static int super_m = 0; // 1 - Ja  2 - Nein
    public static String super_m_str;
    public static int apo = 0; // 1 - Ja 2 - Nein
    public static String apo_str;
    public static int death = 0; // 1 - Kopfschuss 2 - Abtrennen 3 - Gegengift 4 - Normale Todesarten
    public static String death_str;
    public static long punktzahl;
    public static String punk_str;
}

并且像这样我算数点

    package com.zombies.survive;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class result_activity extends Activity {
    static Context mContext;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        String ant_ren = getApplicationContext().getString(R.string.ant1);
        String ant_itm = getApplicationContext().getString(R.string.ant2);
        String ant_fam = getApplicationContext().getString(R.string.ant3);
        String ant_plc = getApplicationContext().getString(R.string.ant4);
        String ant_geo = getApplicationContext().getString(R.string.ant5);
        String ant_vir = getApplicationContext().getString(R.string.ant6);
        String ant_wlk = getApplicationContext().getString(R.string.ant7);
        String ant_sup = getApplicationContext().getString(R.string.ant8);
        String ant_apo = getApplicationContext().getString(R.string.ant9);
        String ant_tot = getApplicationContext().getString(R.string.ant10);
        //Rennen Frage
            if(antworten.rennen == 0)
                antworten.punktzahl += 5;
            else
                antworten.punktzahl += 10;
        //Item Frage
            if(antworten.next_item == 0)
                antworten.punktzahl += 6;
            else if(antworten.next_item == 1)
                antworten.punktzahl += 10;
            else if(antworten.next_item == 2)
                antworten.punktzahl += 2;
            else if(antworten.next_item == 3)
                antworten.punktzahl += 5;
        //Familie Frage
            if(antworten.family == 0)
                antworten.punktzahl += 3;
            else
                antworten.punktzahl += 10;
        //Place Frage
            if(antworten.place == 0)
                antworten.punktzahl += 6;
            else if(antworten.place == 1)
                antworten.punktzahl += 2;
            else if(antworten.place == 2)
                antworten.punktzahl += 8;
            else if(antworten.place == 3)
                antworten.punktzahl += 10;
            else if(antworten.place == 4)
                antworten.punktzahl += 5;
            else if(antworten.place == 5)
                antworten.punktzahl += 6;
            else if(antworten.place == 6)
                antworten.punktzahl += 5;
        //Geo Frage
            if(antworten.geo == 0)
                antworten.punktzahl += 10;
            else if(antworten.geo == 1)
                antworten.punktzahl += 8;
            else if(antworten.geo == 2)
                antworten.punktzahl += 4;
        //Virus Frage
            if(antworten.virus == 0)
                antworten.punktzahl += 2;
            else if(antworten.virus == 1)
                antworten.punktzahl += 4;
            else if(antworten.virus == 2)
                antworten.punktzahl += 10;
            else if(antworten.virus == 3)
                antworten.punktzahl += 1;
        //Walk Frage
            if(antworten.walk == 0)
                antworten.punktzahl += 6;
            else if(antworten.walk == 1)
                antworten.punktzahl += 8;
            else if(antworten.walk == 2)
                antworten.punktzahl += 10;
            else if(antworten.walk == 3)
                antworten.punktzahl += 3;
            else if(antworten.walk == 4)
                antworten.punktzahl += 1;
        //Supermarkt Frage
            if(antworten.super_m == 0)
                antworten.punktzahl += 10;
            else if(antworten.super_m == 1)
                antworten.punktzahl += 5;
       //Apotheken Frage
            if(antworten.apo == 0)
                antworten.punktzahl += 10;
            else if(antworten.apo == 1)
                antworten.punktzahl += 5;
       //Töten Frage
            if(antworten.death == 0)
                antworten.punktzahl += 7;
            else  if(antworten.death == 1)
                antworten.punktzahl += 4;
            else  if(antworten.death == 2)
                antworten.punktzahl += 5;
            else  if(antworten.death == 3)
                antworten.punktzahl += 10; 
        antworten.punk_str = String.valueOf(antworten.punktzahl);
        TextView ergebniss = (TextView)findViewById(R.id.res_txt);
        ergebniss.setMovementMethod(new ScrollingMovementMethod());
        ergebniss.setText(R.string.wenn_eine_zombie_apokalypse_eintreten_w_rde_steht_die_chance_f_r_dich_zu_berleben_bei_ + antworten.punk_str + "%\n\n\n"+ant_ren+ant_itm+ant_plc+ant_fam+ant_geo+ant_vir+ant_wlk+ant_sup+ant_apo+ant_tot);

        Button back_but = (Button)findViewById(R.id.back_but);
        back_but.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(result_activity.this,home.class);
                startActivity(i);

            }
        });
    }
}

如果你一起添加字符串“2”,“4”和“5”,你将得到“245”,而如果你添加整数,你将获得11.你的变量“punktzahl”必须持有一个字符串。

你确定你加入的punktzahl变量是来自antworten类的吗? 你在写antworten.geo,但不是antworten.punktzahl。

如果您尝试在IDE中查找变量,您到达了哪里?

您可以尝试使用.intValue()

int tempInt1 = 5;
int tempInt2 = 4;
int tempInt3 = tempInt2.intValue() + tempInt1.intValue();

.add()

int tempInt1 = 5;
int tempInt2 = 4;
int tempInt3 = tempInt2.add(tempInt1);

我手头没有编译器,所以我不知道这些是否有效,但是它们是可以尝试的。

另外,请记住,如果某个地方你不小心将字符串添加到int中, 结果值将是一个字符串! 这可能是您可能拥有不期望它们的字符串的原因。

我认为@thoredge走在正确的轨道上。 尝试替换此行:

antworten.punk_str = String.valueOf(antworten.punktzahl);

有了这个:

antworten.punk_str = antworten.punktzahl.getClass().getName();

如果punktzahl真的很long ,你应该得到一个语法错误。 否则,您将看到Java和Android认为它真正的类。

我可以想到两种方式,它可能最终成为其他类型。 第一个,正如@thoredge所暗示的那样,你实际上并没有得到课堂上的antworten 是否有可能在项目的不同包中有两个具有相同名称的不同类?

也许com.zombies.survive.antwortencom.zombies.antworten

您是否可能正在查看旧的antworten副本? 也许它没有被重新编译,而早期的版本实际上使用了一个String 尝试进行make-clean / build-all(Project> Clean in Eclipse)。 尝试重新启动IDE。 尝试删除源代码,甚至是项目,并从头开始从源代码管理中检查它。

我能想到的最后一件事是它可能是一个Classpath问题。 您是否有可能在项目中有一个名为“antworten”的jar文件而不是您期望的类? 我已经看到过去发生了一些非常奇怪的事情,例如,当在WebSphere上安装了两个应用程序时,他们使用了同一个库的不同版本。 类路径上有两个不同版本的同一个类。 结果是完全神秘的。 我有一个非常不愉快的下午帮助同事弄明白。 所以要确保没有发生在你身上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM