Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 点击按钮后文件中的Android随机字符串_Java_Android_Random - Fatal编程技术网

Java 点击按钮后文件中的Android随机字符串

Java 点击按钮后文件中的Android随机字符串,java,android,random,Java,Android,Random,我对随机数有些问题。我需要从txt文件中选择一行,并在单击按钮后将其传递到textview(每次都是不同的一行)。我的代码只在第一次单击时执行一次,但我想为每个按钮单击显示下一行。(对不起,我的英语不好)-_- 公共类MainActivity扩展活动{ 长种子=System.nanoTime(); 字符串newString1; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstan

我对随机数有些问题。我需要从txt文件中选择一行,并在单击按钮后将其传递到textview(每次都是不同的一行)。我的代码只在第一次单击时执行一次,但我想为每个按钮单击显示下一行。(对不起,我的英语不好)-_-

公共类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);

   }