我为我缺乏经验道歉,但我已经盯着我的屏幕好几个小时了,试图让它工作,但我就是做不到。我知道有一个简单的解决方案我看不到,但我要么没有找到它,要么我无法理解我找到了什么。如果一个经验丰富的程序员看了这段代码,并在里面吐了一点,我不会感到惊讶,所以如果你有时间,请随时纠正我的错误。
好吧,所以我的目标是创建一个快速阅读应用程序,因为我认为它相对简单,但仍然足以让我学习。我已经创建了一款应用程序,可以让文本出现,并在单词之间循环,但一旦它结束,它就会在我面前抛出一个“不幸的,已经停止”,并返回到MainActivity。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
**My code:**
package com.example.android.speedread;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
public class ReadActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read);
}
public void onClickButtonStart(View view) {
//removes button once its clicked
Button btn_startReading = (Button) findViewById(R.id.btn_startReading);
btn_startReading.setVisibility(View.GONE);
//gets content from an EditText from another class
Bundle extras = getIntent().getExtras();
if (extras != null) {
String s = extras.getString("userInput");
final String[] words = s.split("\\s+");
//starts Thread for displaying said text
Thread t = new Thread() {
int currentWordNumber;
@Override
public void run() {
try {
for (int i = 0; i < words.length; i++) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv_onScreenWord = (TextView) findViewById(R.id.tv_onScreenWord);
//This is where I get an error, and I understand why I'm getting the error,
//but I'm just not sure how to deal with it.
tv_onScreenWord.setText(words[currentWordNumber = currentWordNumber + 1]);
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
**My layout code:**
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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"
tools:context="com.example.android.speedread1.ReadActivity"
android:background="@color/colorPrimaryWhite">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="100sp"
android:textColor="#000000"
android:id="@+id/tv_onScreenWord"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/btn_startReading"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="onClickButtonStart"
android:background="@color/colorPrimaryDark"
android:textColor="@color/colorPrimaryWhite" />
</RelativeLayout>发布于 2016-05-05 00:47:03
您正在使用currentWordNumber = currentWordNumber + 1。currentWordNumber最初并未设置,因此它默认为整数默认值0。然后在每次访问时,在访问它之前迭代它的,所以第一次运行得到words[1],第二次运行得到words[2],最后一次运行得到words[words.length] (导致异常)。
使用currentWordNumber++而不是currentWordNumber = currentWordNumber + 1。currentWordNumber。通常,x++意味着使用x,然后递增(因此,在第一次迭代时,它会给出单词,然后从0递增到1)。另一方面,您所做的等同于++x;您在使用之前设置了值(因此,在第一次迭代中,您从0递增到1,然后获得words1)。
或者,删除currentWordNumber并改用words[i]。这个外部索引添加了什么?
发布于 2016-05-05 00:49:21
当您计算表达式currentWordNumber = currentWordNumber + 1时,它在第一次迭代时的计算结果为1,而不是0,因此将处理第二个单词,而不是第一个单词。它在每次迭代中加1,因此在最后一次迭代中,表达式将等于words.length,它比数组的末尾多一个。
如果将表达式更改为currentWordNumber++,则用于在数组中查找值的值在递增之前是currentWordNumber的值,因此在第一次迭代时,数组索引将为0,然后currentWordNumber将递增为1。在第二次迭代中,数组索引将为1,currentWordNumber将递增为2,依此类推。
https://stackoverflow.com/questions/37033434
复制相似问题