Во внеурочных заметках я стараюсь размещать наиболее интересные решения популярных задач. В этот раз мы сосчитаем сумму цифр трехзначного числа. К примеру есть число 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. Задачку мы решили.