Не считывает количество тестов
Помогите с решением задачи. Проблема в том, что программа выводит ответ после ввода первой группы чисел. Несмотря на то, что ввожу количество тестов 2. То есть я ввожу 2 (количество тестов) далее необходимо ввести две группы чисел (зависит от количества тестов) 2 4 6 и 3 9, но после ввода первой группы чисел 2 4 6 и нажатия Enter программа выводит ответ 2 12.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n == 0) {
System.out.println("NO SOLUTION");
} else {
for (int i = 0; i < n; i++) {
int k = sc.nextInt();
int[] nums = new int[k];
for (int j = 0; j < k; j++) {
nums[j] = sc.nextInt();
}
int gcd = nums[0];
int lcm = nums[0];
for (int j = 1; j < k; j++) {
gcd = gcd(gcd, nums[j]);
lcm = lcm(lcm, nums[j]);
}
System.out.println(gcd + " " + lcm);
}
}
}
private static int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
private static int lcm(int a, int b) {
return a * (b / gcd(a, b));
}
}
Ответы (1 шт):
У вас не задаётся в тестах отдельное число K -- количество чисел в каждом тесте.
Вероятно, после ввода количества тестов N данные для каждого теста необходимо обрабатывать построчно, т.е. прочесть строку при помощи Scanner::nextLine, разбить её по пробелам и распарсить числа.
При использовании Scanner::nextLine после Scanner::nextInt также придётся принять предупредительные меры, в виде считывания int n = Integer.parseInt(sc.nextLine());
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
if (n == 0) {
System.out.println("NO SOLUTION");
} else {
for (int i = 0; i < n; i++) {
String[] strs = sc.nextLine().split(" "); // k = strs.length!
int[] nums = new int[strs.length];
for (int j = 0; j < strs.length; j++) {
nums[j] = Integer.parseInt(strs[j]);
}
int gcd = nums[0];
int lcm = nums[0];
for (int j = 1; j < nums.length; j++) {
gcd = gcd(gcd, nums[j]);
lcm = lcm(lcm, nums[j]);
}
System.out.println(gcd + " " + lcm);
}
}
}
