2014-10-11 3 views
0

Прошу прощения, если это уже было задано раньше, но после тщательного поиска мне не удалось найти окончательный ответ, поэтому я подумал, что попрошу здесь. Я новичок в Java (для кодирования вообще), и ему было поручено написать программу, которая вводит введенный пользователем 3-значный номер и добавляет эти три цифры.Как разбить целое на массив с помощью Java?

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

String myInput; 
    myInput =   
    JOptionPane.showInputDialog(null,"Hello, and welcome to the ThreeDigit program. " 
    + "\nPlease input a three digit number below. \nThreeDigit will add those three numbers and  display their sum."); 
    int threedigitinput; 
    threedigitinput = Integer.parseInt(myInput); 
+2

Почему вы хотите создать массив? Почему бы просто не вытащить каждую цифру из входной строки и добавить их? Это звучит как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – azurefrog

ответ

0

вы можете использовать целочисленную математику, чтобы придумать с тремя номерами отдельно

int first = threedigitinput/100; 
int second = (threedigitinput % 100)/10; 
int third = threedigitinput % 10; 
+0

overkill, учитывая, что он может просто извлечь цифры и добавить их. –

+0

Я знаю, но это первое, что пришло мне в голову, с тем, что уже сделал вопрос – JRowan

0

Классический пример использования divmod:

public class SumIntegerDigits { 
    public static void main(String[] args) { 
     System.out.println(sumOfDigitsSimple(248)); // 14 
     System.out.println(sumOfDigitsIterative(248)); // 14 
     System.out.println(sumOfDigitsRecursive(248)); // 14 
    } 

    // Simple, non-loop solution 
    public static final int sumOfDigitsSimple(int x) { 
     int y = x % 1000; // Make sure that the value has no more than 3 digits. 
     return divmod(y,100)[0]+divmod(divmod(y,100)[1],10)[0]+divmod(y,10)[1]; 
    } 

    // Iterative Solution 
    public static final int sumOfDigitsIterative(int x) { 
     int sum = 0; 
     while (x > 0) { 
      int[] y = divmod(x, 10); 
      sum += y[1]; 
      x = y[0]; 
     } 
     return sum; 
    } 

    // Tail-recursive Solution 
    public static final int sumOfDigitsRecursive(int x) { 
     if (x <= 0) { 
      return 0; 
     } 
     int[] y = divmod(x, 10); 
     return sumOfDigitsRecursive(y[0]) + y[1]; 
    } 

    public static final int[] divmod(final int x, int m) { 
     return new int[] { (x/m), (x % m) }; 
    } 
} 
+1

никаких петель, как он сказал. простой синтаксический анализ строк и добавление должны это сделать. –

1

Есть несколько способов, один из которых будет ...

String ss[] = "123".split(""); 
    int i = 
      Integer.parseInt(ss[0]) + 
      Integer.parseInt(ss[1]) + 
      Integer.parseInt(ss[2]); 
    System.out.println(i); 

другой будет ...

String s = "123"; 
    int i = 
      Character.getNumericValue(s.charAt(0)) + 
      Character.getNumericValue(s.charAt(1)) + 
      Character.getNumericValue(s.charAt(2)); 
    System.out.println(i); 

и еще один будет ...

String s = "123"; 
    int i = 
      s.charAt(0) + 
      s.charAt(1) + 
      s.charAt(2) - 
      (3 * 48); 
    System.out.println(i); 

НО жесткое кодирование для 3-х чисел не очень полезно за пределами этого простого случая. Так как насчет рекурсии ??

public static int addDigis(String s) { 
     if(s.length() == 1) 
      return s.charAt(0) - 48; 
     return s.charAt(0) - 48 + addDigis(s.substring(1, s.length())); 
} 

Выход для каждого примера: 6

0

Если я правильно понял ваш вопрос, вы можете использовать Character.digit(char,int), чтобы получить значение для каждого символа с чем-то вроде -

int value = Character.digit(myInput.charAt(0), 10) 
     + Character.digit(myInput.charAt(1), 10) 
     + Character.digit(myInput.charAt(2), 10);