2015-02-05 1 views
0

В настоящее время я работаю над базовым (и, как я вижу, часто назначаемым) проектом java, в котором я должен создать программу, которая имитирует свертку кубиков. В моем проекте я только имитирую катящийся двух шестигранных кристаллов. Для выполнения этой задачи необходимо использовать массивы.Базовая программа Java Dice - проблема с поиском самой длинной полосы

До сих пор у меня есть блок try/catch, который запрашивает у пользователя количество рулонов, которые они хотели бы имитировать, и гарантирует, что они дают целочисленный ввод. Это, в свою очередь, создает длину массива для имитатора кубиков. До этого момента мой код работает, но теперь я застрял в том, как найти самую длинную строку последовательных сумм в этом массиве.

Я уверен, что мне нужно сравнивать значение dieSum для каждого рулона против себя, а если dieSum == dieSum, то увеличивая переменную для моей текущей строки на 1. Я просто не уверен, как это сделать , Я подозреваю, что у меня может быть проблема, потому что моя переменная dieSum не сохраняется в массиве.

import java.util.Scanner; 
public class RollThoseDice { 
public static void main(String[] args) { 
    Scanner kbd = new Scanner(System.in); 

    System.out.println("MyNameHere"); 
    System.out.println("ThirdProgram \n"); 

    //Variable listing and initialization 
    int rollTotal = 0; //number of trials 
    int dieSum; //sum of the outcome of both dice per roll 

    //Try - Catch block to ensure positive integer input from user for rollTotal 
    System.out.println("***Welcome to the Dice Roll Probability Generator***"); 
    while (true){ 
     System.out.println("Enter how many dice rolls you would like to simulate: "); 
     try { 
      rollTotal = kbd.nextInt() + 1; 
      break; 
     } catch (Exception e) { 
      System.out.println("Please only enter a positive integer. Try again. "); 
      kbd.next(); 

     } 
    } 


    int die1[] = new int[rollTotal]; //Variable for the first die 
    int die2[] = new int[rollTotal]; //Variable for the second die 


    int[] diceArray = new int[rollTotal]; 
    for (int i=1; i<diceArray.length; i++) { 
     die1[i] = (int)(6.0*Math.random() + 1.0); //Generate random # between 1-6 
     die2[i] = (int)(6.0*Math.random() + 1.0); 
     System.out.println("***Roll " + i + "***"); 
     System.out.print("Dice one rolled: " + die1[i] + ", dice two rolled: " + die2[i] + "\n") ; 
     dieSum = die1[i] + die2[i]; 
     System.out.println("Total rolled was: " + dieSum + "\n"); 

    } 
} 

}

Большое спасибо за то, взглянуть на это для меня, и простите за свежесть сайта и программирования в целом.

+0

Я хотел бы добавить, что до сих пор мой код успешно имитировал перекатывание двух кубиков и добавлял их сумму для количества испытаний, определенных пользователем. –

ответ

1

Вы должны следить из двух следующих переменных: int biggestStreak, currentStreak (инициализировано 1).

После проката кости и и хранить переменные, вы можете проверить, если ваш рулон такой же, как рулон до и увеличить currentStreak:

int lastDieSum = die1[i-1] + die2[i-1]; 

if (lastDieSum == dieSum) { 
    currentStreak++; 
    if (currentStreak > biggestStreak) { 
     biggestStreak = currentStreak; 
    } 
} else { 
    currentStreak = 1; 
} 

Последний бит теперь также сохраняет текущую полосу в biggestStreak если он больше, чем самая большая полоса. Наконец, текущая полоса возвращается к нулю, когда значение больше не совпадает с lastDieSum.

Надеюсь, это поможет!

+0

Большое спасибо, это имеет большой смысл с тем, как мой код уже выложен. Не следует ли инициализировать переменные строк в 1? Я попытался реализовать это в своем коде, но только кажется, что он отображает полосу так, как я ее инициализировал. –

+0

Вы правы. У вас всегда есть полоса одного при прокатке кубиков. Где именно вы добавили код? Внутри цикла for? – 1Darco1

+0

извинения. У меня много проблем с форматированием кода для этих комментариев. да, я добавил его внутри цикла for, я решил, что он должен быть там, чтобы он мог рассчитывать для каждого рулона. –

0

Одним из довольно простых решений было бы создать еще две переменные в вашем коде.

Тот, который содержит текущую полосу, и другую, которая содержит предыдущий dieSum.

Everytime вы заканчиваете рулон запустить, если оператор, который сравнивает текущий dieSum с предыдущей dieSum и если они равны, увеличить полосу, иначе просто установить полосу обратно в 0.

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