如何在Java中为Android编写随机报价生成器?

问题描述:

我对于Android的Java很新,基本上只是一个尝试为HTC手机制作几个基本应用程序的noob。到目前为止,主要是通过复制代码,我编写的应用程序将写入“Hello,World”,打印一个随机数并显示一张图片,这些在我的手机上运行良好。如何在Java中为Android编写随机报价生成器?

我现在想结合我所做的和编写一个应用程序,该应用程序将从指定的列表中生成一个随机引号并将其打印在屏幕上。刷新按钮也不错。

我看着这些链接第一次作为一个出发点: Forrst Stack Overflow

不过,我觉得我兜兜现在试图将两者结合起来。我首先制作一个引号数组,然后生成一个随机数并将其分配给引号,然后尝试使用tv.setText方法编写它。

任何帮助感激地收到!谢谢!

这是我到目前为止有:

package com.Me; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
import java.util.Random; 

public class QuoteActivity extends Activity { 

int numQuotes = 10; 
String[] quotes = new String[numQuotes] {"John", "Mary", "Bob"}; 
String randomQuote = quotes[Math.floor(Math.random() * numQuotes)]; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //Make a new text view passing Activity object 
    TextView tv = new TextView(this); 
    //Set a text into view 

    tv.setText(randomQuote); 
    //set the view into activity view container 
    setContentView(tv); 
} 

}

+0

有什么问题吗? – m0skit0 2012-02-23 12:47:52

好,一些基本的东西,第一:你不要引号指定号码,您所使用的随机数索引引号数组。随着中说,这样的事情会做的伎俩:

String[] quotes = new String[] {"q1", "q2", "q3"}; 
String randomQuote = quotes[(int) (Math.random() * quotes.length)]; 

请注意,你不能同时设置数组的大小,并在同一时间将其初始化。即要么你不喜欢上面,或者你做这样的事情:

int numQuotes = 3; 
String[] quotes = new String[numQuotes]; 
quotes[0] = "q1"; 
quotes[1] = "q2"; 
quotes[2] = "q3"; 

我看到一对夫妇的错误在你的代码:

  • 你要么通过

String[] quotes = new String[]{"1", "2", "3"};初始化数组

String[] quotes = new String[3]; 
quotes[0] = "1"; 
quotes[1] = "2"; 
quotes[2] = "3"; 
  • Math.floor()和Math.random()返回double,并且您应该使用ints访问数组元素。你应该转换为int。你实际上并不需要floor(),因为random()返回正值。
  • 如果您尝试访问不存在的数组元素,您将得到一个异常。如果你有3个元素和math.random()* 10给你4的数组 - 你会崩溃。

我建议:

int randomElemenetIndex = (int) (Math.random() * 10) % 3; //This way you will have 0, 1 or 2 
... 
tv.setText(quotes[randomElementIndex]); 
+0

这太棒了,谢谢。这是我最后一起去的那个,它的工作很完美。在此基础上,我可以创建许多应用程序。很明显,我需要回到Java的基础知识,但同时这是伟大的:) – 2012-02-23 14:03:35

+0

很高兴帮助:) Btw新的Java 7状态: 从Java 7开始,我们不应该再次使用Math。随机()。 Java 7为我们提供了一个新的ThreadLocalRandom类,每个线程都有一个非共享的随机实例。 所以,如果你使用Java 7,你应该考虑迁移到这个。 – Glatzial 2012-02-23 14:42:29