2016-11-17 3 views
0

Я пишу программу, которая возвращает случайное число из шестисторонней матрицы, а также берет строку, чтобы спросить у пользователя количество сторон для второго кубика. Если пользователь вводит числа 2,4,8,10,12,20,100, то роли в кости играют с этим количеством сторон. Если пользователь вводит номер, отличный от этого, чем второй кубик должен сыграть роль умирающего с шестью сторонами. Наша проблема заключается в том, что пользователь вводит число, отличное от заданных значений, оно возвращает 0. Нам нужно вернуть случайное число от 1 до 6, так как это шестигранная матрица. Любые предложения по исправлению кода?Die Rolling Game

//Blueprint 
public class Die{ 
private int numSides; 
private int sideFacingUp; 
public int die1; 
public int die2; 
public int num; 


public Die() 
{ 
    roll(); 
} 
public Die(int number) 
{ 
num = number; 
    if(num==2||num==4||num==8|num==10||num==12||num==20||num==100) 
    { 
    roll2(num); 
    } 
    else 
    { 
     roll(); 
    } 
} 
public void roll() 
{ 
    die1= (int)(Math.random()*6)+1; 
} 
public void roll2(int no) 
{ 
    die2 = (int)(Math.random()*no)+1; 

} 
public int getDie1() 
{ 
    //System.out.println("I m here"); 
    return die1; 
} 
public int getDie2() 
{ 
    return die2; 
} 

} 


//actual program 
import java.util.Scanner; 
public class DieTester{ 
public static void main(String[] args){ 
int num; 
Die D1 = new Die(); 
Scanner s1 = new Scanner(System.in); 
System.out.println("The Value of the First Die:"+D1.getDie1()); 
System.out.println("Enter number of Die you want to create"); 
num = s1.nextInt(); 
Die D2 = new Die(num); 

System.out.println("The Value of the Second Die:"+D2.getDie2()); 

} 
} 
+0

Добро пожаловать на переполнение стека! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, помогите нам с некоторыми [дополнительными методами отладки] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Если у вас все еще есть проблемы после этого, пожалуйста, не забудьте вернуться с более подробной информацией. –

+1

Первый шаг: в вашем классе умирают от die1 и die2 и создают dieFace; Вы думаете об этом неправильно. Единственное значение, которое вы хотите вернуть, - это вершина кубика, а не две разные кости. Также избавьтесь от roll2. вам это не нужно. die1 и die2 становится dieFace и только возврат dieFace. – Sedrick

+0

В целом, вопрос «Введите номер Die, который вы хотите создать», здесь звучит не очень хорошо. Вопрос должен быть примерно таким: «Сколько сторон или лиц вы хотите, чтобы вторая кукла имела?» – Sedrick

ответ

2

Проблема заключается в getDie2().

Когда вы звоните roll(), вы назначаете номер die1.

Таким образом, если пользователь вошел 3. Он называет roll() и присваивает случайное значение die1 вместо die2 и значение в int по умолчанию всегда 0. Вот почему вы получаете 0.

Измените getDie2() на наличие 0.

public int getDie2() 
{ 
    if(die1 == 0) // die1 will be 0 because roll2() is called. So return die2 
    { 
     return die2; 
    } 
    else   // die2 will be 0 because roll() is called. So return die1 
    { 
     return die1; 
    } 
} 

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

Как это:

public class Die{ 

private int sideFacingUp; 
private int numSides; 


public Die() 
{ 
    roll(); 
} 
public Die(int number) 
{ 
    numSides = number; 
    if(numSides==2||numSides==4||numSides==8|numSides==10||numSides==12||numSides==20||numSides==100) 
    { 
    roll2(numSides); 
    } 
    else 
    { 
     roll(); 
    } 
} 
public void roll() 
{ 
    sideFacingUp= (int)(Math.random()*6)+1; 
} 
public void roll2(int no) 
{ 
    sideFacingUp = (int)(Math.random()*no)+1; 

} 
public int getDie() 
{ 
    //System.out.println("I m here"); 
    return sideFacingUp; 
} 

} 
+0

Таким образом, он говорит, что мне нужны два поля данных, в котором хранится количество сторон на матрице, а другое, в котором хранится какая сторона в данный момент. Я вижу, что вы используете сторону, обращенную к области данных, но как насчет numSides; поле данных, похоже, что он ничего не делает? – Angie

+0

@ АНГИ Я думаю, что забыл удалить это. Это бесполезно. Я имею в виду 'num'. Вы можете использовать 'numSides' вместо' num', потому что это более читаемо. – SkrewEverything