Имам лек проблем. Насоките за всеобхватния проблем са следните:
Игралната дъска има 31 клетки. Първата е означена като START, последната клетка е END, а останалите клетки са номерирани от 1 до 29.
Има трима играчи, A, B и C. Играта започва с всички играчи в клетката START. Играч A винаги е първи, след това B, след това C, след това A и т.н. Играта приключва, когато играч достигне клетката END или след нея.
Всеки ход се състои от хвърляне на 8-странен зар и преместване на толкова клетки напред. Въпреки това, ако зарът показва 4, преместете назад толкова много клетки (но не отивайте преди START!); ако зарът показва 6, играчът изобщо не се движи и губи следващия ход. Ако играч попадне на клетка, заета от другия играч, играчът, който е бил на клетката, незабавно скача на START.
Вход: Хвърлянията на 8-странния зар за пет игри. Всяка игра се състои от положителни числа, представляващи хвърлянията, завършващи с 0. Първото число е за играч A, след това B, след това C, след това A и т.н. Всяка игра завършва както е описано по-горе или когато се прочете 0.
Резултат: За всяка игра отпечатайте крайната позиция на играчите A, B и C. Позицията и на тримата играчи трябва да е правилна, за да получите кредит за всеки резултат; няма частичен кредит.
Така че, преди да започна да обяснявам проблема, имам 80% от кода завършен. По никакъв начин не търся някой, който да ми свърши работата, просто търся някой, който евентуално би могъл да ми обясни стратегия, която да използвам за следната част от проблема.
Завърших напълно кода за частта за движение на лабораторията, като например всички случаи на зарове от 1 до 8, с изключение на 6. Сега проблемът ми е, че не знам как да накарам програмата да пропуска ход на играчите И следващия ход ако зарът е хвърлен като 6. С други думи, как да изпълня изискването „пропускам ход и губя следващия ход“? Кодът, който имам досега (работи само за входове без номер 6) е по-долу:
import java.util.Scanner;
public class seniorLab{
static String input;
static double parsedInput;
static int i = 0;
static int count = 1;
static int positionA;
static int positionB;
static int positionC;
static int valueOfRoll;
static boolean aAtEnd;
static boolean bAtEnd;
static boolean cAtEnd;
public seniorLab(){
}
static void labLoop(){
for (int i = 0; i < input.length(); i++){
if (input.charAt(i) != '0'){
if (i % 3 == 0){
valueOfRoll = charToNum(input.charAt(i));
positionA += valueOfRoll;
if (positionA == positionB){
positionB = 0;
}
if (positionA == positionC){
positionC = 0;
}
if (positionA >= 31){
aAtEnd = true;
break;
}
} else if (i % 3 == 1){
valueOfRoll = charToNum(input.charAt(i));
positionB += valueOfRoll;
if (positionB == positionA){
positionA = 0;
}
if (positionB == positionC){
positionC = 0;
}
if (positionB >= 31){
bAtEnd = true;;
break;
}
} else if (i % 3 == 2){
valueOfRoll = charToNum(input.charAt(i));
positionC += valueOfRoll;
if (positionC == positionA){
positionA = 0;
}
if (positionC == positionB){
positionB = 0;
}
if (positionC >= 31){
cAtEnd = true;
break;
}
}
} else if (input.charAt(i) == '0'){
break;
}
}
System.out.print("Output #" + count + ": ");
System.out.print("A-" + positionA + ", B-" + positionB + ", C-" + positionC);
}
static int charToNum(char ch){
switch (ch) {
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return -4;
case '5': return 5;
case '7': return 7;
case '8': return 8;
}
return 0;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Line #" + count + ": ");
input = in.nextLine();
input = input.replaceAll("[,]", "");
seniorLab sL = new seniorLab();
sL.labLoop();
}
}
Благодаря за всяка помощ!
Изпитвам същото при провеждане на тестове под IntelliJ.
В моя случай виновникът се оказа множество версии на игрална рамка по пътя на класа.
От въпроса ви не става ясно дали изпълнявате тестовете от командния ред директно или не, от sbt или от IntelliJ, но в моя случай те работеха добре от sbt, но не и в intellij и успях да разреша проблема чрез претърсвайки моите зависимости на подмодула и гарантирайки, че всички те съответстват на основния проект.
- person Dennis Meng   schedule 16.11.2013