Android 添加isn';t在安卓系统中工作
发生了一件非常奇怪的事情。我有一个应用程序可以根据答案计算分数。它工作得很好,但由于我的本地化(这对我的计分系统没有任何影响),它们没有正确添加;相反,它们像字符串一样添加 2+4+5=245,在11岁之前……有什么想法吗 例如:Android 添加isn';t在安卓系统中工作,android,math,Android,Math,发生了一件非常奇怪的事情。我有一个应用程序可以根据答案计算分数。它工作得很好,但由于我的本地化(这对我的计分系统没有任何影响),它们没有正确添加;相反,它们像字符串一样添加 2+4+5=245,在11岁之前……有什么想法吗 例如: if(antworten.geo == 0) punktzahl += 10; else if(antworten.geo == 1) punktzahl += 8;
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
}
}
就像这样,我在数分数
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”,而如果添加int,将得到11。您的变量“punktzahl”必须包含字符串。您确定要添加在一起的punktzahl变量是antworten类中的变量吗?你在写antworten.geo,但不是antworten.punktzahl
如果您试图在IDE中查找变量,您将到达哪里?您可以尝试使用
.intValue()
:
或.add()
我手边没有编译器,所以我不知道这些是否能工作,但它们值得一试
另外,请记住,如果您在某个地方意外地将字符串添加到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
?也许它没有被重新编译,而早期版本实际上使用了字符串。尝试执行makeclean/buildall(Eclipse中的Project>clean)。尝试重新启动IDE。尝试删除源代码,甚至项目,并从头开始将其从源代码管理中签出
我所能想到的最后一件事是,这可能是一个类路径问题。您是否有可能在项目中有一个名为“antworten”的类的jar文件,而不是您期望的那个类?我曾经看到过一些非常奇怪的事情发生在过去,例如,在WebSphere上安装了两个应用程序,它们使用同一个库的不同版本。类路径上有同一类的两个不同版本。结果是完全神秘化。我在帮助一位同事解决这个问题上度过了一个非常不愉快的下午。因此,请确保您没有遇到这种情况。并且您确定punktzahl是整数而不是字符串?(上面的代码是long,而不是int)。也许您有多个同名变量?一个在更局部的作用域中是字符串,另一个在外部的作用域中是int?我来检查一下,如果你使用String.valueOf(punktzahl),那么你可以将int转换成字符串。@Liam Schnell你可以发布一个更完整的例子吗?像这样我得到了答案:
int tempInt1 = 5;
int tempInt2 = 4;
int tempInt3 = tempInt2.add(tempInt1);
antworten.punk_str = String.valueOf(antworten.punktzahl);
antworten.punk_str = antworten.punktzahl.getClass().getName();