developer tip

True 또는 False를 무작위로 반환

copycodes 2020. 11. 29. 11:53
반응형

True 또는 False를 무작위로 반환


반환 하거나 임의로 Java 메서드 를 만들어야합니다 . 어떻게 할 수 있습니까?truefalse


클래스 java.util.Random에는 이미 다음 기능이 있습니다.

public boolean getRandomBoolean() {
    Random random = new Random();
    return random.nextBoolean();
}

그러나 Random임의의 부울이 필요할 때마다 항상 새 인스턴스를 만드는 것은 효율적이지 않습니다 . 대신 Random임의의 부울이 필요한 클래스 유형의 속성을 만든 다음 각각의 새로운 임의의 부울에 해당 인스턴스를 사용합니다.

public class YourClass {

    /* Oher stuff here */

    private Random random;

    public YourClass() {
        // ...
        random = new Random();
    }

    public boolean getRandomBoolean() {
        return random.nextBoolean();
    }

    /* More stuff here */

}

(Math.random() < 0.5) 무작위로 true 또는 false를 반환합니다.


이렇게해야합니다.

public boolean randomBoolean(){
    return Math.random() < 0.5;
}

다음 코드로 할 수 있습니다.

public class RandomBoolean {
    Random random = new Random();
    public boolean getBoolean() {
        return random.nextBoolean();
    }
    public static void main(String[] args) {
        RandomBoolean randomBoolean = new RandomBoolean();
        for (int i = 0; i < 10; i++) {
            System.out.println(randomBoolean.getBoolean());
        }
    }
}

도움이 되었기를 바랍니다. 감사합니다.


다음과 같이 얻을 수 있습니다.

return Math.random() < 0.5;

편향되지 않은 결과를 위해 다음을 사용할 수 있습니다.

Random random = new Random();
//For 50% chance of true
boolean chance50oftrue = (random.nextInt(2) == 0) ? true : false;

참고 : random.nextInt (2)는 숫자 2가 경계임을 의미합니다. 계산은 0에서 시작합니다. 따라서 2 개의 가능한 숫자 (0과 1)가 있으므로 확률은 50 %입니다!

결과가 참 (또는 거짓) 일 확률을 높이고 싶다면 위를 다음과 같이 조정할 수 있습니다!

Random random = new Random();

//For 50% chance of true
boolean chance50oftrue = (random.nextInt(2) == 0) ? true : false;

//For 25% chance of true
boolean chance25oftrue = (random.nextInt(4) == 0) ? true : false;

//For 40% chance of true
boolean chance40oftrue = (random.nextInt(5) < 2) ? true : false;

Java의 Random클래스는 CPU의 내부 시계를 사용합니다 (내가 아는 한). 마찬가지로 RAM 정보를 임의의 소스로 사용할 수 있습니다. Windows 작업 관리자, 성능 탭을 열고 실제 메모리-사용 가능 : 지속적으로 변경됩니다. 대부분의 경우 값은 약 1 초마다 업데이트되지만 드문 경우에만 값이 몇 초 동안 일정하게 유지됩니다. 더 자주 변경되는 다른 값은 System Handles 및 Threads 이지만 cmd값을 가져 오는 명령을 찾지 못했습니다 . 따라서이 예에서는 사용 가능한 실제 메모리 를 임의의 소스로 사용합니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public String getAvailablePhysicalMemoryAsString() throws IOException
    {
        Process p = Runtime.getRuntime().exec("cmd /C systeminfo | find \"Available Physical Memory\"");
        BufferedReader in = 
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        return in.readLine();
    }

    public int getAvailablePhysicalMemoryValue() throws IOException
    {
        String text = getAvailablePhysicalMemoryAsString();
        int begin = text.indexOf(":")+1;
        int end = text.lastIndexOf("MB");
        String value = text.substring(begin, end).trim();

        int intValue = Integer.parseInt(value);
        System.out.println("available physical memory in MB = "+intValue);
        return intValue;
    }

    public boolean getRandomBoolean() throws IOException
    {
        int randomInt = getAvailablePhysicalMemoryValue();
        return (randomInt%2==1);
    }


    public static void main(String args[]) throws IOException
    {       
        Main m = new Main();
        while(true)
        {
            System.out.println(m.getRandomBoolean());
        }
    }
}

As you can see, the core part is running the cmd systeminfo command, with Runtime.getRuntime().exec().

For the sake of brevity, I have omitted try-catch statements. I ran this program several times and no error occured - there is always an 'Available Physical Memory' line in the output of the cmd command.

Possible drawbacks:

  1. There is some delay in executing this program. Please notice that in the main() function , inside the while(true) loop, there is no Thread.sleep() and still, output is printed to console only about once a second or so.
  2. The available memory might be constant for a newly opened OS session - please verify. I have only a few programs running, and the value is changing about every second. I guess if you run this program in a Server environment, getting a different value for every call should not be a problem.

참고URL : https://stackoverflow.com/questions/8878015/return-true-or-false-randomly

반응형