【问题标题】:How do you print a specific line of text from a text file using math.random in Java?如何在 Java 中使用 math.random 从文本文件中打印特定的文本行?
【发布时间】:2018-05-11 03:43:10
【问题描述】:

您好,我是 java 新手。我需要编写一个程序,让精灵告诉某人他们的财富。对于这个程序,我从基于随机数(来自 math.random)的程序中获取输入,并从它们返回的任何数字(1-100)返回文本行。有人可以帮我解决这个问题(最好不使用我不明白的专业课程)。谢谢!

public void askFortune() 
{   
    Scanner input = new Scanner("fortunes.txt");
    double number = Math.random();
    int num = (int) number * 100;
    num += 1;
}

【问题讨论】:

  • 将文本文件复制到列表或数组中,然后从它们的 .. Arr[RANDOM_NUMBER] .. 中选择它

标签: java algorithm logic


【解决方案1】:

您可以尝试迭代您的扫描仪,直到您到达随机线,或者到达扫描仪的末尾:

public void askFortune() {   
    Scanner input = new Scanner("fortunes.txt");
    double number = Math.random();
    int num = (int) number * 100;
    num += 1;
    int counter = 0;
    String line = "";

    while (counter < number) {
        if (!input.hasNextLine()) {
            break;
        }
        line = input.nextLine();
        ++counter;
    }

    if (counter == number) {
         System.out.println("Found line:\n" + line);
    }
    else {
        System.out.println("Input file does not have enough lines"); 
    }
}

【讨论】:

    【解决方案2】:

    这是java的传统IO方式。

    public void askFortune() {   
        BufferedReader input = null;
    
        double number = Math.random();
        int num = (int) (number * 100);
        num += 1;
        int lineCount = 0;
        String line = "";
    
        try {
            String foundLine = null;
            input = new BufferedReader( 
               new InputStreamReader(new FileInputStream("fortunes.txt")));
            while((line = input.readLine()) != null)
            {
    
                if(num == lineCount)
                {
                    foundLine = line;
    
                    break;
                }
    
                lineCount++;
            }
    
            if(foundLine != null)
                System.out.printf("Found line[%d]:%s\n", num, foundLine);
            else
                System.out.println("Wrong line number" + number + ":" + num); 
    
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    您必须检查以下行,

    int num = (int) number * 100;
    

    这可能会导致操作数顺序问题,如果您希望 1 到 100 作为行号范围,请更改它。

    你可以使用

    int num = (int) (number * 100);
    

    int num = (int) (Math.random() * 100) + 1;
    

    而不是

    double number = Math.random();
    int num = (int) (number * 100);
    num += 1;
    

    希望对你有帮助……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多