2014-03-12 153 views
0

您好我正在做一個擲硬幣模擬器的java必須以某種方式完成。它必須有一個字符串,用於保持由無參構造函數創建的「頭部」或「尾部」字符串,拋擲方法必須是無效的,並且必須有一個getsideup方法,然後我們必須擲硬幣20次並且顯示頭部和尾部的數量......我可以很容易地使用無void方法,只是返回結果,但繞過這個void和getsideup會讓我瘋狂。 這是我迄今爲止。java硬幣拋擲模擬器問題

import java.util.Random; 
public class coin { 
    public static String sideUp; 

    public static void toss() { 
     Random rand = new Random(); 
     int sideup = rand.nextInt(2); 
     if (sideup == 0) { 
      sideUp = "heads"; 
     } else { 
      sideUp = "tails"; 
     } 
    } 

    public static String getsideup() { 
     System.out.println(sideUp); 
     return sideUp; 
    } 

    public static void main(String[] args) { 
     // coin coin = new coin(); 
     int hcount = 0; 
     int tcount = 0; 
     for (int i = 1; i <= 20; i++) { 
      if (getsideup().equals("heads")) { 
       hcount++; 
      } else { 
       tcount++; 
      } 
     } 
     System.out.println("total heads = " + hcount + " total tails = " + tcount); 
    } 
} 

我希望有人能告訴我什麼即時做錯了,並把我放在正確的方向。

+3

難道你不應該在週期中調用'''toss()'''!除此之外,我沒有看到問題。 – NeplatnyUdaj

回答

1

你不會在循環開始時調用toss()。這需要將值設置爲sideUp,並且需要sideUp來改變每次拋擲。

+0

在for循環中調用折騰()可以正常運行,我相信這本書的要求,謝謝大家的幫助。 – stev0104

+0

如果幫助解決問題,請[接受](http://meta.stackexchange.com/a/65088/155831)答案。 –

-1
for(int i = 1; i <= 20; i++) 
    { 
     toss(); 
     if (getsideup().equals("heads")) 
     { 
     hcount++; 
     } else 
     { 
     tcount++; 
     } 
    } 
+2

這是混合責任。我認爲向吸氣者添加折騰是令人困惑的。 – NeplatnyUdaj

+0

然後從for循環man調用toss()方法!我編輯了我的帖子...我只是想幫助你...沒有點投票! – Hirak

+0

當有人指出他們認爲你的答案不是很好時,也沒有什麼意思。不管你有多好,你在這裏回答問題時都會經常發生。試着從中吸取教訓。 – Keppil

-1
import java.util.Random; 
public class coin 
{ 
public static String sideUp; 
public int hcount=0; 
public int tcount=0; 

public static void toss() 
    { 
     Random rand = new Random(); 
     int sideup = rand.nextInt(2); 
     if (sideup == 0) 
      { 
       sideUp = "heads"; 
       hcount++; 
      } 
      else 
      { 
       sideUp = "tails"; 
       tcount++; 
      } 
     }  

    public static void main(String[] args) 
    { 
    for(int i=0;i<20;i++) 
    {toss();} 
    System.out.println("total heads = " + hcount + " total tails = " + tcount); 
    } 
} 
+0

如果您在折騰方法中增加計數,而不是嘗試設置字符串,使用另一種方法調用該方法並在那裏增加該方法使其更容易。 – javawocky

+0

那麼你將不得不有一個setter,然後setSide()在折騰方法。否則,你不會設置獲取器的值來檢索。 – javawocky

+0

我不是那個投下了票的人,而只是指出了它 – Steve

0

簡單的修復方法是在if語句之前放在for循環中,但我看到很多可以在這裏完成的東西。首先,我想補充一個構造幣類,並添加HCOUNT和TCOUNT的類變量,使頭部和尾部常數:

private String sideUp; 
private int hcount; 
private int tcount; 
private static final String HEADS = "Heads"; 
private static final String Tails = "Tails"; 

Coin() 
{ 
    this.sideUp = HEADS; 
    this.hcount = 0; 
    this.tcount = 0; 
} 

然後,我會做一個方法來檢查的折騰:

public void checkToss() 
{ 
    if (getsideup().equals(HEADS)) 
     hcount++; 
    else 
     tcount++; 
} 

現在在if語句之前添加toss()和checkCoin()方法到for循環。它應該是這樣的:

for (int i = 1; i <= 20; i++) 
{ 
    coin.toss(); 
    coin.checkToss(); 
} 

我還要做一個getter的頭數和尾巴數:

public int getHeadsCount() 
{ 
    return this.hcount; 
} 

public int getTailsCount() 
{ 
    return this.tcount; 
} 

一切放在一起看起來是這樣的:

import java.util.Random; 
public class Coin 
{ 
    private String sideUp; 
    private int hcount; 
    private int tcount; 
    private static final String HEADS = "Heads"; 
    private static final String TAILS = "Tails"; 

    Coin() 
    { 
     this.sideUp = HEADS; 
     this.hcount = 0; 
     this.tcount = 0; 
    } 

    public void toss() 
    { 
     Random rand = new Random(); 
     int sideup = rand.nextInt(2); 
     if (sideup == 0) 
      sideUp = HEADS; 
     else 
      sideUp = TAILS;  
    } 

    public String getsideup() 
    { 
     System.out.println(sideUp); 
     return sideUp; 
    } 

    public void checkToss() 
    { 
    if (getsideup().equals(HEADS)) 
     this.hcount++; 
    else 
     this.tcount++; 
    } 

    public int getHeadsCount() 
    { 
     return this.hcount; 
    } 

    public int getTailsCount() 
    { 
     return this.tcount; 
    } 

    public static void main(String[] args) 
    { 
     Coin coin = new Coin(); 
     for (int i = 1; i <= 20; i++) 
     { 
      coin.toss(); 
      coin.checkToss(); 
     } 
     System.out.println("Total Heads = " + coin.getHeadsCount() + " Total Tails = " + coin.getTailsCount()); 
    } 
} 
0

什麼這個 ?

import java.io.*; 
import java.math.*; 
class Coin_Toss { 
public static void main(String args[])throws Exception { 
    InputStreamReader ir = new InputStreamReader(System.in); 
    BufferedReader br = new BufferedReader(ir); 
    double d, drop, side, s_d, re=1; 
    int tries=0, score=0; 
    while(re==1) { 
     tries++; 
     System.out.println("-> Hi, please choose your side\n-> Press 1 for Head\n-> Press 2 for Tails"); 
     side=Integer.parseInt(br.readLine()); 
     drop=Math.random(); 
     d = Math.round(drop); 
     if(d== 0) { 
      s_d = 1; 
     } 
     else { 
      s_d = 2; 
     } 
     if(s_d == side) { 
      System.out.println("-> You Won"); 
      score++; 
     } 
     else { 
      System.out.println("-> You Lose"); 
     } 
     if(s_d==1) { 
      System.out.println("->Its Heads"); 
     } 
     else if(s_d==2) { 
      System.out.println("-> Its tails"); 
     } 
     System.out.println("-> Press 1 to Toss again \n -> Press 2 to  Quit"); 
     re=Double.parseDouble(br.readLine()); 
     if(re==2) { 
      System.out.println("You Scored "+score+" out of "+tries); 
     } 
    } 
} 
}