2011-09-27 192 views
0

我得到了这段代码,我一直在努力,它将会是一个游戏,我试图创建只是在两个玩家之间切换。每次它切换它应该写出一个问题,如真相或敢。不允许两次写同一个问题,因此应该能够看到它是否已经使用过这个问题。Android/Java:导入文本文件并从文本文件中读出随机行

到目前为止,我已经运行了它,并且每次点击下一步时它都会在两个玩家之间切换。

但是我有很多的麻烦,从所谓的男人txt文件中获取数据,这里有三条线,文本1文本2和文字3。它应该能够随机取出并知道它是否已经读过。我不能让当前的InputStream工作,它说man文件是int,但它包含字符串?

这里是到目前为止的代码:使用Resources.openRawResource

package truthordare; 

import java.io.FileInputStream; 
import java.io.IOException; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
//import android.content.Intent; 


public class truthordareActivity extends Activity 

{ 
    public int i = 0; 
    //public String man; 
    //public String woman; 
    TextView w; 
    TextView m; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     { 
     final Button buttonPlay = (Button) findViewById(R.id.buttonPlay); 
     buttonPlay.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View v) 
       { 
       gameCode(); 
       } 
     }); 
    } 
} 


    /*public FileInputStream openFileInput(int man) throws IOException 
{ 
    String collected = null; 
    try 
    { 
     FileInputStream fis = openFileInput(R.raw.man); 
     byte[] dataArray = new byte[fis.available()]; 
     while (fis.read(dataArray) != -1) 
      { 
      collected = new String(dataArray); 
      } 
     fis.close(); 
    } 
    catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    return null; 

} 
*/ 



public void gameCode() 
    { 
     // Perform action on click 
     setContentView(R.layout.game); 
     if(i == 0) 
      { 
       w = (TextView)findViewById(R.id.textView1); 
       w.setText("This is a player1"); 
       i = 1; 
       final Button buttonNext = (Button) findViewById(R.id.buttonNext); 
       buttonNext.setOnClickListener(new View.OnClickListener() 
       { 
        public void onClick(View v) 
        { 
         gameCode(); 
        } 
       }); 
      } 
     else 
      { 
       m = (TextView)findViewById(R.id.textView1); 
       m.setText("This is player2"); 
       i = 0; 
       final Button buttonNext = (Button) findViewById(R.id.buttonNext); 
       buttonNext.setOnClickListener(new View.OnClickListener() 
       { 
        public void onClick(View v) 
        { 
         gameCode(); 
        } 
       }); 
      } 

    } 

} 

回答

1

您是否考虑过使用XML文件来解决您的问题?从您提供的信息,结构应该是这样的:

<questions> 
    <question> 
     <id>1</id> 
     <text>This is question nr. 1</text> 
    </question> 
    <question> 
     <id>2</id> 
     <text>This is question nr. 2</text> 
    </question> 
    <question> 
     <id>3</id> 
     <text>This is question nr. 3</text> 
    </question> 
</questions> 

加载所有的问题到列表/ ArrayList的问题为对象,当提出问题 - 从列表中删除。如果您需要稍后保存问题,请不要将其删除,而应将所有问题的ID保存在另一个列表中,并且当您尝试获取下一个问题时,请确保其ID不在ID列表中。

为了让你只使用一个随机数生成器,为您提供0和则为list.size()之间的值的随机问题。

这样你就不必花时间打开和关闭InputStreams所有的时间,你必须确保一个问题是只问了一次,一个简单的方法。

+0

我已经设法在xml文件中创建一个字符串数组并读取并显示它。我将如何制作该功能,以便它不会采用两次相同的问题? – psalomonsen

+0

这是我现在得到的samle代码(我做了一个测试项目,当我得到它的时候我会实现它)只需点击链接。 [链接](http://pastebin.com/JWhK8cuZ) – psalomonsen

+0

您应该将问题加载到一个List/ArrayList而不是一个数组中。这样你可以在阅读完问题后使用列表中的'remove()'方法,并且你不会得到两次相同的问题。 – kaspermoerch

1

InputStream。在你的情况下,这是getResources().openRawResource(R.raw.man)