2017-01-15 6 views
1

Я пишу программу Java, которая будет играть в игру. В принципе вы выбираете no. игроков и раундов, то программа показывает вам, что каждый игрок должен сказать, по порядку, с учетом следующих правил:Обнаружение, когда целое число состоит только из одной цифры

-Удаление игроков стоит по кругу, они начинают подсчитывать один за другим по часовой стрелке, пока кто-то не достигнет число (больше 10), состоящее только из одной цифры. Например, 11, 22, 33, .., 444 и т. Д., Затем они начинают отсчет против часовой стрелки

например: P9: 9; P10: 10; P11: 11; P12: 13; P11: 14 и т.д. (P10 = Игрок 10)

-Когда получите число, которое является кратным 7, содержит 7 или сумма цифр 7, они говорят «Болц»

Например : P1: 13; P2: Boltz (вместо 14); P3: 15; P4 Boltz (16); P5: Boltz (17); P6: 18 и т.д.

У меня есть код на Java, но я не могу показаться, чтобы получить переключение с по часовой стрелке поворачивается против часовой при числах, составленных только из одной цифры

Можете ли вы мне помочь Функция SameDigits? Спасибо!

import java.util.Scanner; 

public class Boltz { 
    private static Scanner keyboard; 

    public static void main(String[] args) { 
    keyboard = new Scanner(System.in); 

    int nPlayers = 0; 
    int nRounds = 0; 
    int currentPlayer = 0; 
    int sum = 0; 
    int x = 0; 
    boolean isSameDigit = true; 

    System.out.print("Cati jucatori sunt? "); 
    nPlayers = keyboard.nextInt(); 

    System.out.print("Cate runde sunt? "); 
    nRounds = keyboard.nextInt(); 

    System.out.print("Jucatori: " + nPlayers + "; Runde: " + nRounds + "\n"); 

    for (x = 1; x <= nPlayers * nRounds; x++) { 

     isSameDigit = SameDigits(currentPlayer); 

     if (currentPlayer < nPlayers && isSameDigit == false) { 
      currentPlayer++; 
     } else { 
      currentPlayer = 1; 
     } 

     if (currentPlayer > 1 && isSameDigit == true) { 
      currentPlayer--; 
     } else { 
      currentPlayer = nPlayers; 
     } 

     sum = digitSum(x); 

     if (x % 7 == 0 || String.valueOf(x).contains("7") || sum == 7) { 
      System.out.println("P:" + currentPlayer + " Boltz"); 
     } else { 
      System.out.println("P:" + currentPlayer + " " + x); 
     } 
    } 
    } 

    public static int digitSum(int num) { 
    int suma = 0; 
    while (num > 0) { 
     suma = suma + num % 10; 
     num = num/10; 
    } 
    return suma; 
    } 

    public static boolean SameDigits(int num) { 
    int add = 0, add2 = 0; 

    while (num > 0) { 
     add = add + num % 10; 
     add2 = add2 + add % 10; 
     num = num/10; 
    } 
    if (add == add2) { 
     return true; 
    } else { 
     return false; 
    } 

    } 

} 

ответ

1

Если я вас правильно понял, вы хотите SameDigits вернуть true если число все же цифры и false иначе. Однозначные номера также должны возвращать true. Это должно быть сделано:

public static boolean SameDigits(int num) { 
    if (num < 0) return false; // or something else? 

    int onesDigit = num % 10; 
    num /= 10; 
    while (num > 0) { 
     if (onesDigit != num % 10) return false; // fail if digits differ 
     num /= 10; 
    } 
    return true; 
} 

P.S. Вы должны соответствовать соглашениям об именах Java и называть свои методы, начиная с строчной буквы (sameDigits вместо SameDigits).

1

Это было бы что-то вроде:

public static boolean sameDigits(int number) { 
     //speical case 
     if (number < 10) 
      return false; 
     String string = String.valueOf(number); 

     for (int i = 1; i <= 9; i++) { 
      if (string.replaceAll(String.valueOf(i), "").length() == 0) 
       return true; 
     } 
     return false; 
} 
+1

Почему вы возвращаете false, когда 'number <10'? – shmosel

+1

Я основываю его на правиле «при условии, что игроки стоят по кругу, они начинают подсчитывать один за другим по часовой стрелке, пока кто-то не достигнет числа (более 10), сделанного только одной цифры. Например, 11, 22, 33 , .., 444 и т. Д., Тогда они начинают отсчет против часовой стрелки ". Кроме того, довольно легко изменить;) –

+0

Достаточно справедливо. Наверное, это не самый лучший метод. – shmosel

0

Я бы использовал регулярное выражение. Это проверяет, состоит ли String из одной цифры, за которой следует одно или несколько повторений одной и той же цифры.

public static boolean sameDigits(int arg) { 
    return Integer.toString(arg).matches("(\\d)\\1+"); 
} 
+0

Не должно ли регулярное выражение ''^(\\ d) \\ 1 + $ "'? – shalvah

+0

@shalvah Нет, этого не должно быть. Метод 'matches' все равно совпадает со всей строкой - нет необходимости добавлять'^'и' $ '. –

+0

Извините, что спросила, но я новичок в регулярном выражении. Для чего нужна «\\ 1»? – shalvah

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