我有一个文本文件,其中包含土耳其语中的所有五个字母的单词。 从那里,我想画一个随机的词。 所有的单词都是AssetManager丝网印刷,但不知怎的,我没有掉一个单词。 我怎么能用循环?
如果你能提供帮助,我会很高兴的。
资源:
public class MainActivity extends Activity {
Button degistir;
TextView kelime;
EditText ykelime;
Random rnd =new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
degistir=(Button)findViewById(R.id.btngiris);
kelime=(TextView)findViewById(R.id.kelime);
ykelime=(EditText)findViewById(R.id.giris);
AssetManager assetManager = getAssets();
// To load text file
InputStream input;
try {
input = assetManager.open("5HarfliKelimeler.txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
// byte buffer into a string
String text = new String(buffer);
int sayi=rnd.nextInt(text.length());
kelime.setText(text);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
degistir.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
kelime.setText(ykelime.getText());
ykelime.setText(null);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
你的文件存在吗? 被抛出的是什么? 你可以记录一个,但是你应该读取输入流直到完成。
我有文件,你可以检查所有的单词大约5000字,但我想从屏幕上做一个随机的单词打印。
逐行读取文件并将所有单词列入清单。(如何逐行阅读|检查此处)
然后,为每个按钮单击指定随机索引。 最后,使用生成的索引显示列表中的单词。 (索引范围必须从0到列表大小)
- 我没有编辑就编辑了你的代码。 -
public class MainActivity extends Activity {
Button degistir;
TextView kelime;
EditText ykelime;
List wordList=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
degistir=(Button)findViewById(R.id.btngiris);
kelime=(TextView)findViewById(R.id.kelime);
ykelime=(EditText)findViewById(R.id.giris);
AssetManager assetManager = getAssets();
// To load text file
InputStream input;
try {
input = assetManager.open("5HarfliKelimeler.txt");
wordList= new ArrayList();
BufferedReader reader = new BufferedReader(new InputStreamReader(input , charset.forName("UTF-8")));
String line ="";
while ((line = reader.readLine()) != null) {
wordList.add(line);
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
degistir.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(wordList!=null){
Random rnd =new Random();
Integer generatedIndex = rnd.nextInt(wordList.size());
String selectedWord=wordList.get(generatedIndex);
kelime.setText(selectedWord);
// ykelime.setText(null);
}
else{
//DISPLAY MSG ETC.
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
谢谢:)随机访问之前,我点击我刚刚做的按钮 - 有点变化。你很棒 :)
别客气 !
也许吧... :)
绝对是:D
如果你的问题解决了,请批准我的答案;)
好吧,我在EditText中输入了单词,我该怎么检查是否有ArrayList。
stackoverflow.com/questions/587404/您需要使用集合搜索。查找匹配项并为每个字符更改事件显示它们。
或者简单的循环。性能不佳但易于实现。
首先,如果您的文件内容不会被更改,那么您必须计算最大行数并将其写为常量:
private String getRandomLine() {
final int FILE_MAX_LINE_INDEX = 5000;//if your file has 5000 lines, and it's content never be changed
Random rnd = new Random();
final int lineIndex = rnd.nextInt(FILE_MAX_LINE_INDEX);
try {
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(getAssets().open("5HarfliKelimeler.txt")));
String s;
while ((s = lnr.readLine()) != null) {
if (lnr.getLineNumber() == lineIndex) {
lnr.close();
return s;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return"";
}
或者,如果您的内容可能会被更改,并且您不知道文件中将包含多少行:
private String getRandomLine() {
List fiveLetterWords = new ArrayList(5000);
try {
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(getAssets().open("5HarfliKelimeler.txt")));
String s;
while ((s = lnr.readLine()) != null) {
fiveLetterWords.add(s);
}
lnr.close();
} catch (IOException e) {
e.printStackTrace();
}
Random rnd = new Random();
return fiveLetterWords.get(rnd.nextInt(fiveLetterWords.size()));
}
为什么要使用静态最大线索引?将每个单词添加到列表中,然后从中选择一个随机索引。 (从0到listSize)@Autocrab
它会更快,如果你知道文件的内容不会改变,所以你知道,该文件包含相同的行数。因此,您可以将此计数指定为常量,并从此值中生成随机int。您不必阅读所有行,您将只读取随机索引之前的行。
您可以轻松读取5 k 10k或50k字的milisecs。只有milisecs ......如果它的5143线怎么办?