2014-01-27 3 views
0

Пытается разработать программу флиппера для монет, которая просит пользователя указать, сколько раз они хотели бы перевернуть монету (# флип должно быть меньше 1000). Затем я получаю случайное число от 1 до 10 и присваиваю это число каждому объявленному индексу массива, основанному на количестве флип, которое пользователь будет делать.Получение ошибок по неизвестной причине

Кажется, у меня возникают три ошибки, связанные с невозможностью разрешить символы на строке math.random. Любая помощь будет оценена по достоинству.

import java.io.*; 
import java.util.*; 

public class coinFlip { 

public static void main(String[] args) throws IOException { 

    // declare in as a BufferedReader; used to gain input from the user 
    BufferedReader in; 
    in = new BufferedReader(new InputStreamReader(System.in)); 

    //declare variables 
    int flips; 
    int anArray[]; 
    int x; 
    int r; 

    System.out.println("How many times would you like to flip your coin?"); 
    flips = Integer.parseInt(in.readLine()); 

    if(flips <= 1000) { 
     System.out.println("You want to flip " + flips + " times"); 
     anArray = new int[flips]; 

     for(x = 0; x <= flips; x++) { 
      r = Math.round(Math.random()*9)+1; 
      anArray[x] = r; 
      System.out.println(anArray[x]); 
     } 
    } 

    } 

} 
+1

Массив длины 10 имеет самый высокий показатель 9. Будьте осторожны с разницей между '<' и '<=' в этом отношении. – csmckelvey

+0

1) Если это флиппер с монеткой: почему 1- 10, а не 1 или 0 (или 2) 2) Зачем использовать Math.round()? Если это целое число, оно автоматически отключается после запятой. – Marenthyu

+0

@Marenthyu вторая часть программы требует поиска, на которой # перевернулось больше всего, часть назначения – Zack

ответ

5

for(x = 0; x <= flips; x++)

должно быть

for(x = 0; x < flips; x++)

flips[1000] является слот 1001-й, который является слишком много.

+1

Good но это не приведет к ошибке компиляции. Проблема в том, что Math.round возвращает long, и он пытается назначить это int. –

+0

@ZouZou как я могу превратить это в int? – Zack

+0

@Zack Поскольку 'Math.random()' возвращает double, либо вам нужно передать результат в int, либо вы можете использовать объект 'Random' и вызывать' nextInt() '. –

2

2 вопроса:

  • Массивы с нуля, так что вы должны остановиться в верхнем массиве связанного менее 1
  • Math#round возвращает длинный поэтому должен быть отлиты

результат:

for(x = 0; x < flips; x++) { 
    r = (int) (Math.round(Math.random()*9)+1); 
    anArray[x] = r; 
    System.out.println(anArray[x]); 
} 

BTW: Вам не нужен import java.util.* как Math находится в java.lang

+0

Спасибо, я пробовал это, но я все равно получаю, что не удается разрешить ошибки символов. Я не знал, что math.round возвращает длинный. – Zack

+2

Из [обсуждения чата] (http://chat.stackoverflow.com/rooms/46179/discussion-between-zack-and-marenthyu) у вас есть свой собственный класс 'Math' - удаление этого класса позволит компилировать программу :) – Reimeus

Смежные вопросы