#java
Вопрос:
Я работаю над лабораторией, которая требует, чтобы я вернул число, которое она переворачивает, чтобы получить головы. Я использовал цикл for и цикл while, но, похоже, возврат значений метода вместе с циклами не делает код выполнимым. Я был бы признателен за помощь. Существует два фрагмента кодов, каждый из которых имеет разные классы, вызывающие другой класс.
import java.util.*; public class GVCoin { // true for heads, false for tails private boolean isHeads; private int flips, heads; private Random r; public GVCoin() { r = new Random(); heads = 0; flips = 0; isHeads = true; } public void flip() { isHeads = r.nextBoolean(); // Flip the coin by randomly choosing true / false flips ; // Increment flip count if(isHeads){ heads ; // Increment heads count if current flip results in heads } } public boolean isHeads() { return isHeads; // Return true if coin is currently heads } public String toString() { String str; str = "Flips: " flips " Heads: " heads " isHeads: " isHeads; return str; // Return String representation of important values } public int numFlips() { return flips; // Return number of total flips } public int numHeads() { return heads; // Return number of total heads } public int numTails() { return flips - heads; // Return number of total tails } public void setToHeads(boolean h) { isHeads = h; } public GVCoin(int seed) { // Create the coin with a random seed this(); r = new Random(seed); } } public class TossingCoins { public int flipForHeads(GVCoin coin, int goal) { int i = 0; do { coin.flip(); i ; } while (i lt; goal); return i; } public static void main(String[] args) { TossingCoins game = new TossingCoins(); GVCoin coin = new GVCoin(15); // Create a GVCoin object with seed value 15 int numHeads = 100; // Desire 100 heads int totalFlips; totalFlips = game.flipForHeads(coin, numHeads); System.out.println("Total number of flips for 100 heads: " totalFlips); } }
Комментарии:
1. В вашем коде есть несколько проблем. Сначала ваш метод
flipForHeads
должен вернуть anint
. Во-вторых, почему вы создаете еще один экземпляр своегоGVCoin
метода в своем методеflipForHeads
? В этом нет никакого смысла. У вас уже есть экземпляр этого объекта, переданный в качестве параметра.
Ответ №1:
Я предлагаю вам не использовать семена при создании Random
. Если вы это сделаете, результат всегда будет одним и тем же.
Вот какой-то рабочий код. Я удалил написанный вами код, который, как я думал, на самом деле не нужен. Ура!
class GVCoin { private Random r; public GVCoin() { r = new Random(); } public GVCoin(int seed) { this(); r = new Random(seed); } public boolean flip() { return r.nextBoolean(); } } public class TossingCoins { public int flipForHeads(GVCoin coin, int goal) { int count = 0; int numberOfHeads = 0; while (numberOfHeads lt; goal) { count ; boolean isHead = coin.flip(); if (isHead) { numberOfHeads ; } } return count; } public static void main(String[] args) { TossingCoins game = new TossingCoins(); GVCoin coin = new GVCoin(); int numberOfHeads = 5; int totalFlips; totalFlips = game.flipForHeads(coin, numberOfHeads); System.out.println("Total number of flips for " numberOfHeads " heads: " totalFlips); } }
Ответ №2:
Мне удалось разгадать код. При вызове метода я просто отформатировал код следующим образом:
int flips = 0; while (coin.numHeads() lt; goal) { coin.flip(); flips ; } return flips;