有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何只生成正数(参见下面我的意思)

所以我写了一个非常简单的程序,要求用户不断猜测数字,直到他们猜到正确的数字,它会告诉他们选择的数字是太低还是太高。我遇到的问题是,数字应该是随机生成的,从1到100,但java将其视为-100到100。不管怎样,我想知道如何只让它返回正数

以下是代码:

import java.util.Random;
import java.util.Scanner;


public class GameMain {

    public static void main(String[] args) {
        int guess = 101;
        Random r = new Random();

        int answer = r.nextInt()%101;

        System.out.println("Whats the number?");
        Scanner input = new Scanner(System.in);


        while (guess!=answer) {
            guess = input.nextInt();

            if (guess > answer) {
                System.out.println("Too high!");
            }
            else if (guess < answer){
                System.out.println("Too low!");
            }
            else if (guess == answer){
                System.out.println("Correct you win!");
            }
        }
    }

}

共 (4) 个答案

  1. # 1 楼答案

    int answer = Math.abs(r.nextInt());
    

    不是最好的解决方案,而是另一种可能的选择。。。当你对负面消息有疑问时。。。数学abs()总是有效的:D

  2. # 2 楼答案

    请参考此链接 http://www.javapractices.com/topic/TopicAction.do?Id=62

    你可以参考这个程序,使用我想的,1作为开始,100作为结束,生成然后继续。。。 导入java。util。随机的

    /** Generate random integers in a certain range. */
    public final class RandomRange {
    
    public static final void main(String... aArgs){
    log("Generating random integers in the range 1..10.");
    
    int START = 1;
    int END = 10;
    Random random = new Random();
    for (int idx = 1; idx <= 10; ++idx){
      showRandomInteger(START, END, random);
    }
    
    log("Done.");
    }
    
    private static void showRandomInteger(int aStart, int aEnd, Random aRandom){
    if (aStart > aEnd) {
      throw new IllegalArgumentException("Start cannot exceed End.");
    }
    //get the range, casting to long to avoid overflow problems
    long range = (long)aEnd - (long)aStart + 1;
    // compute a fraction of the range, 0 <= frac < range
    long fraction = (long)(range * aRandom.nextDouble());
    int randomNumber =  (int)(fraction + aStart);    
    log("Generated : " + randomNumber);
    }
    
    private static void log(String aMessage){
    System.out.println(aMessage);
    }
    } 
    
  3. # 3 楼答案

    Random类还有另一个nextInt(...)方法,该方法接受一个参数,并返回一个介于0和1之间的随机数减去传入的数。如果你通过100,你会得到一个0到99之间的伪随机数。所以只要对随机对象r调用r.nextInt(100) + 1,就可以得到一个介于1和100之间的数字

    一般来说,如果你想要一个介于a和b之间的随机数,你可以使用

    r.nextInt(b - a + 1) + a
    
  4. # 4 楼答案

    使用

    int answer = r.nextInt(100)
    

    而不是

    int answer = r.nextInt()%101