Java 点击按钮后文件中的Android随机字符串
我对随机数有些问题。我需要从txt文件中选择一行,并在单击按钮后将其传递到textview(每次都是不同的一行)。我的代码只在第一次单击时执行一次,但我想为每个按钮单击显示下一行。(对不起,我的英语不好)-_-Java 点击按钮后文件中的Android随机字符串,java,android,random,Java,Android,Random,我对随机数有些问题。我需要从txt文件中选择一行,并在单击按钮后将其传递到textview(每次都是不同的一行)。我的代码只在第一次单击时执行一次,但我想为每个按钮单击显示下一行。(对不起,我的英语不好)-_- 公共类MainActivity扩展活动{ 长种子=System.nanoTime(); 字符串newString1; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstan
公共类MainActivity扩展活动{
长种子=System.nanoTime();
字符串newString1;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
valueA();
Button Button Generate=(按钮)findViewById(R.id.button1);
最终TextView TextGenerateEnumber=(TextView)findViewById(R.id.textView1);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
valueA();
textGenerateNumber.setText(newString1);
}});
}
公共价值A(){
Scanner s=new Scanner(getResources().openRawResource(R.raw.question));
ArrayList=新建ArrayList();
试一试{
而(s.hasNextLine()){
list.add(s.nextLine());
}
}最后{
s、 close();
}
随机r=新随机(种子);
字符串a=list.get(r.nextInt(list.size());
newString1=a.子字符串(2);
}
}
第二个问题:
public class MainActivity extends Activity {
String newString1;
String newString2;
String newString3;
Random random = new Random(System.nanoTime());
.....
public void valueA (){
Scanner s = new Scanner(getResources().openRawResource(R.raw.question));
ArrayList<String> list = new ArrayList<String>();
try {
while (s.hasNextLine() ) {
list.add(s.nextLine());
}
} finally {
s.close();
}
String a = list.get(random.nextInt(list.size()));
newString1 = a.substring(2);
}
public void valueB (){
Scanner s = new Scanner(getResources().openRawResource(R.raw.answer));
ArrayList<String> list = new ArrayList<String>();
try {
while (s.hasNextLine() ) {
list.add(s.nextLine());
}
} finally {
s.close();
}
String b = list.get(random.nextInt(list.size()));
newString2 = b.substring(2);
}
公共类MainActivity扩展活动{
字符串newString1;
字符串newString2;
字符串newString3;
Random Random=新随机(System.nanoTime());
.....
公共价值A(){
Scanner s=new Scanner(getResources().openRawResource(R.raw.question));
ArrayList=新建ArrayList();
试一试{
而(s.hasNextLine()){
list.add(s.nextLine());
}
}最后{
s、 close();
}
字符串a=list.get(random.nextInt(list.size());
newString1=a.子字符串(2);
}
公共价值b(){
Scanner s=new Scanner(getResources().openRawResource(R.raw.answer));
ArrayList=新建ArrayList();
试一试{
而(s.hasNextLine()){
list.add(s.nextLine());
}
}最后{
s、 close();
}
字符串b=list.get(random.nextInt(list.size());
newString2=b.子串(2);
}
您的种子是一个固定值,当您的主要活动是
new Random(seed)
将始终生成相同的值。请改用随机变量,而不是使用seed作为实例变量
Random random = new Random(System.nanoTime());
并在valueA()方法中丢失新的随机行
这样,您就有了一个Random实例,并使用它来计算连续的nextInt值,而不是每次使用它时都有一个新的Random
编辑:
要回答第二个问题,您最好在newQuestion()方法中同时生成问题和答案,并使用getQuestion和getAnswer检索它们。这意味着您的valueA和valueB永远不会失步
String question;
String answer;
void newQuestion() {
int rval = random.nextInt();
question = list.get(rval);
answer = list.get(rval);
}
String getQuestion() {
return(question);
}
String getAnswer() {
return(answer);
}
就像Neil Masson说的,做一个全局随机,因为就像你做的那样,它会给你相同的结果。所以创建一个随机
private Random random = new Random();
random.setSeed(System.nanoTime());
稍后在Value方法中,获取随机值。但您不需要valueA()和valueB(),一个就足以获得正确的问题/答案:
public void value (){
Scanner answerScanner = new Scanner(getResources().openRawResource(R.raw.answer));
Scanner questionScanner = new Scanner(getResources().openRawResource(R.raw.question));
ArrayList<String> answerList = new ArrayList<String>();
ArrayList<String> questionList = new ArrayList<String>();
try {
while (answerScanner.hasNextLine() ) {
answerList.add(answerScanner.nextLine());
questionList.add(questionScanner.nextLine());
}
} finally {
s.close();
}
int nextInt = random.nextInt(questionList.size());
String answerString = answerList.get(nextInt);
String questionString = questionList.get(nextInt);
yourAnswerString = answerString.substring(2);
yourQuestionString = questionString.substring(2);
}
public void值(){
Scanner answerScanner=new Scanner(getResources().openRawResource(R.raw.answer));
Scanner questionScanner=new Scanner(getResources().openRawResource(R.raw.question));
ArrayList answerList=新的ArrayList();
ArrayList questionList=新建ArrayList();
试一试{
while(answerScanner.hasNextLine()){
add(answerScanner.nextLine());
questionList.add(questionScanner.nextLine());
}
}最后{
s、 close();
}
int-nextInt=random.nextInt(questionList.size());
字符串answerString=answerList.get(nextInt);
String questionString=questionList.get(nextInt);
yourAnswerString=answerString.substring(2);
yourQuestionString=questionString.substring(2);
}
No,我想“重置”文本视图并在文本视图中显示新的随机“新闻字符串”。例如:第一个按钮单击->文本视图(aaa),第二个按钮单击->文本视图(bbb).aaa和bbb是文本文件中的随机值。这个文本文件有多长?我的意思是,如果它是一个非常短的文本文件,只有一个视图行,那么随机值可能与以前的值相同。以及为什么使用System.nanoTime()作为random?文本文件的一个参数,该文件包含大约30行。我单击按钮大约20次,random始终获得这一行?System.nanoTime(),因为我从其他txt文件中获得了第二个random,并且获得了相同的random值。我有一个文件问题和第二个答案(问题必须等于答案)我认为最好是创建一个全局随机,通过初始化设置种子并仅在valueA方法中获取r.nextInt()。您的答案很好,但我应该怎么做(请看上面的:第二个问题)。我需要相同的随机值。我获得随机问题和随机答案,但答案必须等于问题,例如valueA获得“问题10”valueB必须获得“answer10”@Icero:我已经编辑了我的答案来回答你的第二个问题。
public void value (){
Scanner answerScanner = new Scanner(getResources().openRawResource(R.raw.answer));
Scanner questionScanner = new Scanner(getResources().openRawResource(R.raw.question));
ArrayList<String> answerList = new ArrayList<String>();
ArrayList<String> questionList = new ArrayList<String>();
try {
while (answerScanner.hasNextLine() ) {
answerList.add(answerScanner.nextLine());
questionList.add(questionScanner.nextLine());
}
} finally {
s.close();
}
int nextInt = random.nextInt(questionList.size());
String answerString = answerList.get(nextInt);
String questionString = questionList.get(nextInt);
yourAnswerString = answerString.substring(2);
yourQuestionString = questionString.substring(2);
}