Во внеурочных заметках я стараюсь размещать наиболее интересные решения популярных задач. В этот раз мы сосчитаем сумму цифр трехзначного числа. К примеру есть число 321 — сумма его чисел 6. Как же сказать об этом программе?
public class test3 { public static void main(String[] args) { System.out.println(sumnum(321)); } public static int sumnum(int number) { } }
Простейший класс, метод main, в котором мы выводим на экран значение, которое вернёт метод sumnum, если передать ему число 546, собственно и сам статический метод sumnum. Статический — дабы нам не создавать объект — сделаем в процедурном стиле.
Итак есть число 321, логично, что каждую цифру нужно «загнать» в массив.
[0] = 3;
[1] = 2;
[2] = 1;
То есть что-то вроде:
public int[] chislo = {"3", "2", "1"};
Ага — подумали мы. Как же сказать программе, что это у нас массив?
Во-первых можно перевести число 321 в строку 321. Для этого можно воспользоваться методом valueOf.
Позволю себе немного «копипасты».
Метод valueOf() в Java имеет следующие варианты, которые зависят от передаваемых параметров. Этот метод возвращает строковое представление переданного аргумента.
- valueOf(boolean b): возвращает строковое представление логического аргумента.
- valueOf(char c): возвращает строковое представление char аргумента.
- valueOf(char[] data): возвращает строковое представление массив char аргументов.
- valueOf(char[] data, int offset, int count): возвращает строковое представление определенного подмассива массив char аргументов.
- valueOf(double d): возвращает строковое представление double аргумента.
- valueOf(float f): возвращает строковое представление float аргумента.
- valueOf(int i): возвращает строковое представление int аргумента.
- valueOf(long l): возвращает строковое представление long аргумента.
- valueOf(Object obj): возвращает строковое представление объекта аргумента.
Пример:
import java.io.*; public class Test { public static void main(String args[]){ double d = 102939939.939; boolean b = true; long l = 1232874; char[] arr = { 'а', 'б', 'в', 'г', 'д', 'е', 'ё' }; System.out.println("Возвращаемое значение: " + String.valueOf(d)); System.out.println("Возвращаемое значение: " + String.valueOf(b)); System.out.println("Возвращаемое значение: " + String.valueOf(l)); System.out.println("Возвращаемое значение: " + String.valueOf(arr)); } }
Получим следующий результат:
Возвращаемое значение: 1.02939939939E8
Возвращаемое значение: true
Возвращаемое значение: 1232874
Возвращаемое значение: абвгдеё
Взято отсюда: http://proglang.su/java/134 и вот это также рекомендую прочесть: http://proglang.su/java/67
В нашем случае будет как-то так:
System.out.println(String.valueOf(321));
После того, как мы получили строку из числа, неплохо бы её разбить на символы методом split.
Метод split() в Java разделяет данную строку вокруг данного регулярного выражения и имеет два варианта.
Синтаксис
Синтаксис этого метода:
public String[] split(String regex, int limit)
или
public String[] split(String regex)
Параметры
Подробная информация о параметрах:
- regex — разграничение регулярного выражения;
- limit — порог, результатом которого означает, как много строк, должно быть возвращено.
Возвращаемое значение
- В Java split() возвращает массив строк, вычисленных путем разделения данной строки вокруг данного регулярного выражения.
Взял отсюда: http://proglang.su/java/125
В качестве regexp в нашем случае будет выступать… как бы это выразиться. Ничего. Вот такие две кавычки «».
То есть наш код может выглядеть как-то так:
public class test3 { int z = 321; String[] chislo = String.valueOf(z).split(""); System.out.println(chislo[1]); }
Отлично! Мы преобразовали число в строку и разбили её на символы, которые и записали в массив chislo типа String! В вышеприведённом коде мы обращаемся к элементу массива chislo с порядковым номером 1. То есть система нам выведет «2», так как элементы массива мы считаем, начиная с 0!
Но как же сосчитать общую сумму числе? Воспользуемся циклом for и методом length.
int result = 0; for (int i = 0; i < chislo.length; i++) { result += Integer.parseInt(chislo[i]); }
метод length считает количество элементов в массиве. Считает он их начиная с единицы, а не с 0!
Внутри у нас переменная result типа int, имеющая изначально значение 0. Метод parseInt() в Java используется для получения примитивного типа данных определенной строки. Метод статический. На вход он принимает String. Все, кроме целых чисел, «получат» Exception. (http://proglang.su/java/69)
При каждой итерации переменная result увеличивается на значение массива chislo[i], которое теперь уже не строка, а число!
Строка
result += Integer.parseInt(chislo[i]);
аналогична строке
result = result + Integer.parseInt(chislo[i]);
В завершении наш код может выглядеть так:
public class test3 { public static void main(String[] args) { System.out.println(sumnum(321)); } public static int sumnum(int number) { String [] chislo = String.valueOf(number).split(""); int result = 0; for (int i = 0; i < chislo.length; i++) { result = result + Integer.parseInt(chislo[i]); } return result; } }
На выходе получим число 6. Задачку мы решили.