我正在尝试构建一个将英语翻译成猪拉丁语的应用程序。但在我对其进行条件编码之前,我希望它能够在屏幕上打印我所拥有的内容。它只打印屏幕上的最后一个字。例如,如果我键入这是它键入单词的单词。我猜这是因为我没有使用索引,但我不知道。我是初学程序员,我需要帮助。这是我的Java代码。
package com.example.morna.piglatin;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickTranslate(View v)
{
final String vowels = "aeiouAEIOU";
EditText inputTranslateText = (EditText)findViewById(R.id.edEnglishText);
String t = inputTranslateText.getText().toString();
List <String> objects = Arrays.asList(t.split("\\s+"));
for(String object: objects)
{
TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
outputPigLatin.setText(String.valueOf(object));
}
答案 0 :(得分:1)
这是因为循环的每次迭代都会将新文本设置为textView
,因此旧文本会被循环中的新文本覆盖,而且您在一个循环中多次声明textView
循环,它没有意义,也不是最优的,所以它会很慢。
而不是这段代码:
for(String object: objects)
{
TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
outputPigLatin.setText(String.valueOf(object));
}
使用这个,将TextView
放在外部循环中,并且只在循环外设置一次文本:
TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
String myText = null;
for(String object: objects)
{
myText += object+", ";
}
outputPigLatin.setText(myText);
如果您要打印很多单词(如数百或数千),将使用StringBuilder
类更优化的方法:
TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
StringBuilder myText = new StringBuilder();
for(String object: objects)
{
myText.append(object).append(", ");
}
outputPigLatin.setText(myText.toString());