[英]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.antworten
和com.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.