#java #control-structure
#java #структура управления
Вопрос:
Я сталкиваюсь с проблемами при решении следующего вопроса: я полагаю, чтобы заставить пользователя ввести число и проверить, является ли это счастливым числом. Счастливое число — это сумма квадратов четной цифры (начиная со второй позиции), кратная 7.
Ниже приведен пример моих кодов, когда я запускаю программу, она застревает при вводе пользователем, пожалуйста, посоветуйте, как мне запустить ее:
public class Tester {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Input a number: ");
int number = scanner.nextInt();
int count = 0;
while(number!=0) {
number/=10;
count;
}
int[] array = new int[count];
int sum = 0;
for (int i=0; i<count; i ) {
array[i] = scanner.nextInt();
}
for (int i=0; i<count; i ) {
if(array[i]%2==0) {
sum =(array[i]*array[i]);
}
else {
continue;
}
}
if (sum%7==0) {
System.out.println("The number: " number "is a Lucky number");
}
else {
System.out.println("Oops! Not a Lucky number");
}
scanner.close();
}
}
Комментарии:
1. Что здесь происходит:
array[i] = scanner.nextInt();
в большинстве проблем со счастливым числом запрашивается одно число, но вы, похоже, запрашиваете дополнительный пользовательский ввод помимо этого (возможно, непреднамеренно), поэтому ваша программа, похоже, «застревает».2. Какой ввод вы передали в программу?
3. Вам нужны четные цифры?
Ответ №1:
Я считаю, что виновником является цикл ниже:
for (int i=0; i<count; i ) {
array[i] = scanner.nextInt();
}
Я думаю, что ваше намерение состояло в том, чтобы получить каждую из цифр в массив. Однако вы получаете ввод от сканера (который в данном случае является пользовательским вводом) count
несколько раз.
Хотя есть несколько способов получить количество цифр и каждую цифру в массив. Я собираюсь дать вам два способа. Кроме того, я не вижу никаких проверок для входного целого числа (например, отрицательных чисел и т. Д.), И я собираюсь игнорировать их прямо сейчас.
Подход 1: исправлен ваш цикл for
Вы просто получаете i-ю цифру числа, используя формулу.
for (int i=1; i<=count; i ) {
array[i] = (int) (number / Math.pow(10, count-i)) % 10;
}
Подход 2: преобразование чисел в строку и обратно с использованием потоков
List<Integer> digits = Arrays.toStream(number.toString().split("")).map(
digitChar -> Integer.parseInt(digitChar)
).collect(Collectors.toList());
Примечание:
Вам нужно импортировать классы java.util.Arrays
и java.util.stream.Collectors
Ответ №2:
Если вам нужны четные цифры, вы можете напрямую получить их в цикле while.
while(number!=0) {
if(count%2 !=0){
int value = number %10; // even positioned values
// Do whatever you need to do with this value
}
number/=10;
count;
}
Если вы хотите преобразовать число в массив цифр, сначала найдите количество цифр с помощью функции log, а затем сохраните его в массиве в обратном порядке.
int noOfDigits =(int) Math.floor(Math.log10(number) 1); // Finding No of digits
int[] array = new int[noOfDigits];
while(--noOfDigits>=0){
array[noOfDigits] = number/10; // storing every digits in reverse order
number%=10;
}
Я не знаю, что приведенный ниже код будет полезен для вашей основной логики, но я тоже это записываю.
Если вам нужна сумма квадратов четных цифр в числе, которое представлено в виде массива, то вы можете использовать приведенный ниже код.
int sum = 0;
for (int i=1; i<array.length; i =2) {
sum = array[i] * array[i];
}
if (sum%7==0) {
// print number is lucky
}
else {
// print number is not lucky
}
Ответ №3:
Если я правильно понял ваше описание, вот программа, которая делает то, что вы хотите:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Input a number: ");
System.out.flush();
int number = scanner.nextInt();
int count = 0;
int n = number;
int sum = 0;
while(n!=0) {
int d = n % 10;
n/=10;
count;
if (count % 2 == 0) {
System.out.printf("sum = %d %d^2 = %dn", sum, d, sum d * d);
sum = d * d;
}
}
if (sum%7==0) {
System.out.printf("The number: %d is a Lucky number (%d = 7 * %d)", number, sum, sum / 7);
}
else {
System.out.println("Oops! Not a Lucky number");
}
scanner.close();
}
Удачный результат:
Input a number: 123456
sum = 0 5^2 = 25
sum = 25 3^2 = 34
sum = 34 1^2 = 35
The number: 123456 is a Lucky number (35 = 7 * 5)