android - switch if case语句的返回值
问题描述:
在我的应用程序中,我有一个随机挑选的图像。图像出现在屏幕上,用户可以将其滑动到一侧。每次它是一个图像a
,计数器应计数,但它不。我的int getMyRandomResId的返回值在条件中是错误的,还是错误在哪里?android - switch if case语句的返回值
public class MainActivity extends Activity
{
private ImageView imageView;
public int sco = 0;
float x1, x2;
float y1, y2;
final Random rand = new Random();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
score = (TextView)findViewById(R.id.textView1);
score.setText(String.valueOf(sco));
}
int getMyRandomResId()
{
int imag = rand.nextInt(4);
switch (imag)
{
case 0:
return R.drawable.a;
case 1:
return R.drawable.b;
case 2:
return R.drawable.c;
default:
return R.drawable.d;
}
}
public boolean onTouchEvent(MotionEvent touchevent)
{
final ViewPropertyAnimator animator = imageView.animate();
switch (touchevent.getAction())
{
case MotionEvent.ACTION_DOWN:
{
x1 = touchevent.getX();
y1 = touchevent.getY();
break;
}
case MotionEvent.ACTION_UP:
{
x2 = touchevent.getX();
y2 = touchevent.getY();
//if left to right sweep event on screen
if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1))
{
if(getMyRandomResId() == R.drawable.a)
{
sco++;
score.setText(String.valueOf(sco));
}
animationRunning = true;
animator.translationX((imageView.getWidth()))
.setDuration(250)
.setListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationEnd(Animator animation)
{
imageView.setTranslationX(0);
imageView.setImageResource(getMyRandomResId());
animationRunning = false;
}
})
.start();
}
}
}
}
答
每次创建Random rand = new Random();
它都从同一点开始。下面是从documentation
报价如果随机的两个实例使用相同的种子创建,并且方法相同的调用序列由对于每个,它们将生成并返回的数字相同的序列。
您应该只创建一次Random
类的实例。例如,像这样:
public class MainActivity extends Activity { final Random random = new Random(); ...
答
getMyRandomResId()这个方法是工作的罚款,虽然foxanna的建议也比较好这里是我做了一些改变我已经测试了这一点,对我来说
工作public class MainActivity extends Activity
{
private ImageView imageView;
public int sco = 0;
float x1, x2;
float y1, y2;
Random rand;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
score = (TextView)findViewById(R.id.textView1);
score.setText(String.valueOf(sco));
rand = new Random();
}
int getMyRandomResId()
{
int imag = rand.nextInt(4);
switch (imag)
{
case 0:
sco++;
return R.drawable.a;
case 1:
return R.drawable.b;
case 2:
return R.drawable.c;
default:
return R.drawable.d;
}
}
public boolean onTouchEvent(MotionEvent touchevent)
{
final ViewPropertyAnimator animator = imageView.animate();
switch (touchevent.getAction())
{
case MotionEvent.ACTION_DOWN:
{
x1 = touchevent.getX();
y1 = touchevent.getY();
break;
}
case MotionEvent.ACTION_UP:
{
x2 = touchevent.getX();
y2 = touchevent.getY();
//if left to right sweep event on screen
if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1))
{
if(getMyRandomResId() == R.drawable.a)
{
score.setText(String.valueOf(sco));
}
animationRunning = true;
animator.translationX((imageView.getWidth()))
.setDuration(250)
.setListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationEnd(Animator animation)
{
imageView.setTranslationX(0);
imageView.setImageResource(getMyRandomResId());
animationRunning = false;
}
})
.start();
}
}
}
}
希望这会有所帮助。
答
我想你错过了这里的东西。 我测试过你的发布代码,它的功能就像一个魅力。与创建矢量资源威泽德创建 MainActivity.java
public class MainActivity extends AppCompatActivity {
public int sco = 0;
float x1, x2;
float y1, y2;
private ImageView imageView;
@Override
public boolean onTouchEvent(MotionEvent touchevent) {
final ViewPropertyAnimator animator = imageView.animate();
switch (touchevent.getAction()) {
case MotionEvent.ACTION_DOWN: {
x1 = touchevent.getX();
y1 = touchevent.getY();
break;
}
case MotionEvent.ACTION_UP: {
x2 = touchevent.getX();
y2 = touchevent.getY();
//if left to right sweep event on screen
if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1)) {
final int randomResId = getMyRandomResId();
Log.e("ResId: ", String.valueOf(randomResId));
if (randomResId == R.drawable.ic_assignment_late_black_24dp) {
sco++;
Log.e("NewScoId", String.valueOf(sco));
}
animator.translationX((imageView.getWidth()))
.setDuration(250)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
imageView.setTranslationX(0);
imageView.setImageResource(randomResId);
}
})
.start();
}
}
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.x);
}
int getMyRandomResId() {
Random rand = new Random();
int imag = rand.nextInt(4);
switch (imag) {
case 0:
return R.drawable.ic_assignment_late_black_24dp;
case 1:
return R.drawable.ic_android_black_24dp;
case 2:
return R.drawable.ic_battery_charging_30_black_24dp;
default:
return R.drawable.ic_exposure_neg_2_black_24dp;
}
}
}
activity_main.xml中
<RelativeLayout android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<ImageView
android:id="@+id/x"
android:layout_width="200dp"
android:layout_height="200dp"
android:text="Hello World!"
app:srcCompat="@drawable/ic_android_black_24dp" />
</RelativeLayout>
而且使用随机图像。 我logcat的(而击)看起来像这样:
E/ResId:: 2130837590
E/ResId:: 2130837590
E/ResId:: 2130837589
E/ResId:: 2130837588
E/NewScoId: 1
E/ResId:: 2130837587
E/ResId:: 2130837590
E/ResId:: 2130837588
E/NewScoId: 2
E/ResId:: 2130837587
E/ResId:: 2130837589
E/ResId:: 2130837588
E/NewScoId: 3
[...]
因为我感到很困惑的答案@StefMa指着我,我要在这里问你一件事:与调试器,你尝试检查,如果如果条件是到达?尝试在你的getMyRandomId变量的结果和调试器检查它的值 –
我猜你的代码是正确的。但不幸的是(因为随机int),你还没有达到这一点。我创建了一个测试设置,它是绿色的。这意味着一切都是正确的...请参阅https://git.io/v1Hrw – StefMa
@StefMa那么你知道它为什么不起作用吗? –