У меня есть простой класс Java, который использует System.err.println для отладки кода во время его выполнения. цель этого класса - найти максимальное парное произведение заданных чисел.
Ниже приведен код и вывод.
public class MaxPairwiseProduct {
private static boolean enableLog = true;
static long getMaxPairwiseProductFast(int[] numbers) {
long max_product = 0;
int n = numbers.length;
int firstMaxInt = -1;
int secondMaxInt = -1;
int firstMaxIndex = 0;
int secondMaxIndex = 0;
loge("firstMax initialized :" + firstMaxInt);
loge("secondMax initialized :"+ secondMaxInt);
loge("***********************************************");
for (int firstPassIndex = 1; firstPassIndex < n; firstPassIndex++) {
loge("firstpass : Number " +firstPassIndex);
if (numbers[firstPassIndex] > firstMaxInt )
{
loge("\t firstpass : Found max " +numbers[firstPassIndex]);
firstMaxInt = numbers[firstPassIndex] ;
firstMaxIndex = firstPassIndex ;
}
}
for (int secondPassIndex = 1; secondPassIndex < n; secondPassIndex++) {
loge("secondPassIndex : Number " +numbers[secondPassIndex]);
if (numbers[secondPassIndex] > secondMaxInt && secondPassIndex != firstMaxIndex )
{
loge("\t firstpass : Found max " +secondPassIndex);
secondMaxInt = numbers[secondPassIndex] ;
secondMaxIndex = secondPassIndex;
}
}
max_product = firstMaxInt * secondMaxInt ;
return max_product;
}
public static void main(String[] args) {
FastScanner scanner = new FastScanner(System.in);
int n = scanner.nextInt();
int[] numbers = new int[n];
for (int i = 0; i < n; i++) {
numbers[i] = scanner.nextInt();
}
System.out.println(getMaxPairwiseProductFast(numbers));
}
private static void loge(String s)
{
if (enableLog == true)
{
System.err.println(s);
}
}
private static void log(String s)
{
if (enableLog == true)
{
System.out.println(s);
}
}
static class FastScanner {
BufferedReader br;
StringTokenizer st;
FastScanner(InputStream stream) {
try {
br = new BufferedReader(new
InputStreamReader(stream));
} catch (Exception e) {
e.printStackTrace();
}
}
String next() {
while (st == null || !st.hasMoreTokens()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}
вывод (из окна вывода в Netbeans):
Понятно, что выходные сообщения не в запланированном порядке.
Мне кажется, что программа выполняется в многопоточном режиме.
что за ошибка в моем коде и почему он выводится так?