你這個是區域變數要做全域變數的事情吧?
counter 那邊則是應該這樣打
int counter=0;
for(counter=0;counter<10000;counter++)
//
正常邏輯應該是這樣的
public class Test {
/* public static int randomNumber(){ ... } */
public static void main(String[] args) {
int odd = 0, even = 0, counter = 0;
for(int i = 0; i < 10000; i++) {
int randNumber = randomNumber();
// 記錄介於 10 - 20 出現的次數 //
if(randNumber >= 10 && randNumber <= 20){
counter++;
}
// 記錄單數雙數出現的次數 //
if(randNumber % 2 == 0){ //判斷是否雙數
even++;
}else{
odd++:
}
}
System.out.println("介於 10 - 20 出現的次數: " + counter);
System.out.println("odd: " + odd);
System.out.println("even: " + even);
}
}
抄一下,改一下 下面那位的回答
第 6 題:
public int randomNumber(){
Random rand = new Random();
int y = rand.nextInt(3);
if (y < 2) {
return 11 + rand.nextInt(5)*2;
}else {
return 10 + rand.nextInt(6)*2;
}
}
// 更短的版本 //
public int randomNumber(){
Random rand = new Random();
return rand.nextInt(3) < 2 ?
11 + rand.nextInt(5) * 2 :
10 + rand.nextInt(6) * 2;
}
第 7 題:
import java.util.Random;
public class Test {
// 第 6 題 //
public int randomNumber(){
Random rand = new Random();
int y = rand.nextInt(3);
if (y < 2) {
return 11 + rand.nextInt(5) * 2;
}else {
return 10 + rand.nextInt(6) * 2;
}
}
public static void main(String[] args) {
Test rand = new Test();
int odd = 0, even = 0, counter = 0;
for(int i = 0; i < 10000; i++) {
int randNumber = rand.randomNumber();
// 記錄介於 10 - 20 出現的次數 //
if(randNumber >= 10 && randNumber <= 20){
counter++;
}
// 記錄單數雙數出現的次數 //
if(randNumber % 2 == 0){ //判斷是否雙數
even++;
}else{
odd++:
}
}
// Use printf //
System.out.printf("介於 10 - 20 出現的次數: %d", counter);
System.out.printf("odd: %d", odd);
System.out.printf("even: %d", even);
}
}
首先:
你要按題目要求運用java.util.Random來產生出隨機數,所以不可用SecureRandom 。
第二:
在randomNumber()內,必須要return最後的隨機數。
第6題:
public static int randomNumber(){
int odd = 0, even = 0;
int y = new Random().nextInt(3);
if (y < 2) {
odd = 11 + new Random().nextInt(5)*2;
return odd;
}else {
even = 10 + new Random().nextInt(6)*2;
return even;
}
}
第7題:
import java.util.Random;
public class RandomNumberCase {
public static int randomNumber(){
int odd = 0, even = 0;
int y = new Random().nextInt(3);
if (y < 2) {
odd = 11 + new Random().nextInt(5)*2;
return odd;
}else {
even = 10 + new Random().nextInt(6)*2;
return even;
}
}
public static void main(String[] args) {
int odd = 0, even = 0, counter = 0;
for(int i = 100000; i > 0 ; i--) {
int randNumber = randomNumber();
//System.out.println("randNumber: " + randNumber);
counter++;
if(randNumber % 2 == 0){ //判斷是否偶數//
even++;
}else {
odd++;
}
}
System.out.println("介於 10 - 20 出現的次數: " + counter);
System.out.println("odd: " + odd);
System.out.println("even: " + even);
}
}
謝謝你的幫助,想再請問java.util.Random和SecureRandom的差別是什麼?
還有第六題的題意public int randomNumber()並未加上static是否要新增一物件呼叫?
另外,如果沒有加上static,就需要創建另一個object來轉移random number, 可以用我以下方式來做:
import java.util.Random;
public class RandomNumberCase {
public int randomNumber(){
int odd = 0, even = 0;
int y = new Random().nextInt(3);
if (y < 2) {
odd = 11 + new Random().nextInt(5)*2;
return odd;
}else {
even = 10 + new Random().nextInt(6)*2;
return even;
}
}
public static void main(String[] args) {
int odd = 0, even = 0, counter = 0;
RandomNumberCase non_static_number = new RandomNumberCase();
int randNumber = non_static_number.randomNumber();
for(int i = 100000; i > 0 ; i--) {
int randNumber = tansferNumber();
//System.out.println("randNumber: " + randNumber);
counter++;
if(randNumber % 2 == 0){
even++;
}else {
odd++;
}
}
System.out.println("介於 10 - 20 出現的次數: " + counter);
System.out.println("odd: " + odd);
System.out.println("even: " + even);
}
}
public /*static*/ int randomNumber(){ /* ... */ }
public static int tansferNumber(){
return new Test().randomNumber();
}
martinyeung謝謝,所以你圖片中的static是不是忘記刪除?
CWKSC謝謝,所以應該照你給的修正,對吧?
謝謝各位的幫助!!
己修改了昨天的回答,當中提到的不是method, 應該是object才對,要額外創建一個新的object來調用non static的物件。