iT邦幫忙

0

請教java大神,我試著自己打程式,卻不知該如何解決

bj6 2020-04-05 15:23:141298 瀏覽

我將圖片中的2個問題打在同一個package裡,可是無法執行,對於方法的呼叫該如何使用呢?
先謝謝各位幫忙!https://ithelp.ithome.com.tw/upload/images/20200405/20126112p1xYpqaZiB.jpghttps://ithelp.ithome.com.tw/upload/images/20200405/20126112brMytzr4ad.png

0
e6319a5b
iT邦新手 5 級 ‧ 2020-04-05 16:14:30

你這個是區域變數要做全域變數的事情吧?
counter 那邊則是應該這樣打

int counter=0;
for(counter=0;counter<10000;counter++)
//

bj6 iT邦新手 5 級 ‧ 2020-04-05 20:45:59 檢舉

謝謝!!

1
CWKSC
iT邦新手 5 級 ‧ 2020-04-05 16:51:43

正常邏輯應該是這樣的

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);
    }
}

=== Update ===

抄一下,改一下 下面那位的回答

第 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);
    }
}
看更多先前的回應...收起先前的回應...
bj6 iT邦新手 5 級 ‧ 2020-04-05 20:42:40 檢舉

那請問一下,若2題分開打該如何呈現?我是先手寫,後執行,但好像不是我要的效果

bj6 iT邦新手 5 級 ‧ 2020-04-05 20:44:55 檢舉

https://ithelp.ithome.com.tw/upload/images/20200405/20126112zliK86XEmC.jpg

CWKSC iT邦新手 5 級 ‧ 2020-04-07 15:41:49 檢舉

bj6
Updated

bj6 iT邦新手 5 級 ‧ 2020-04-07 17:26:58 檢舉

謝謝!
請問一下,為什麼要「Test rand = new Test」?

因為要額外創建一個新的object來調用non static的物件,否則就會報錯

0
martinyeung
iT邦新手 4 級 ‧ 2020-04-06 01:00:08

首先:
你要按題目要求運用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);
    }
}
看更多先前的回應...收起先前的回應...
bj6 iT邦新手 5 級 ‧ 2020-04-06 23:31:06 檢舉

謝謝你的幫助,想再請問java.util.Random和SecureRandom的差別是什麼?

bj6 iT邦新手 5 級 ‧ 2020-04-06 23:37:17 檢舉

還有第六題的題意public int randomNumber()並未加上static是否要新增一物件呼叫?

  1. SecureRandom 提供加密的隨機數,當中的seed是不可預測的。
    java.util.Random 提供的隨機數,是使用當前時間作為seed。
    最終都可以產生隨機數的。

另外,如果沒有加上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);
    }
}

CWKSC iT邦新手 5 級 ‧ 2020-04-07 15:55:52 檢舉
public /*static*/ int randomNumber(){ /* ... */ }
	
public static int tansferNumber(){
    return new Test().randomNumber();
}
bj6 iT邦新手 5 級 ‧ 2020-04-07 17:32:17 檢舉

martinyeung謝謝,所以你圖片中的static是不是忘記刪除?

bj6 iT邦新手 5 級 ‧ 2020-04-07 17:34:22 檢舉

CWKSC謝謝,所以應該照你給的修正,對吧?

bj6 iT邦新手 5 級 ‧ 2020-04-07 17:35:04 檢舉

謝謝各位的幫助!!

己修改了昨天的回答,當中提到的不是method, 應該是object才對,要額外創建一個新的object來調用non static的物件。

我要發表回答

立即登入回答