Ошибка при одновременном использовании входных данных при использовании нескольких классов и работает нормально в одном классе - PullRequest
0 голосов
/ 13 января 2019

Если я использую только один класс, он работает отлично, но когда я использую несколько классов, я сталкиваюсь с проблемой, когда: когда я даю ввод целиком как пакет (копировать, вставить), он не работает (все еще ждет для некоторого дополнительного ввода и ничего не делает), но когда я даю каждый ввод вручную, он отлично работает.

Итак, эта проблема началась, когда я представил новый класс, поэтому я предполагаю, что что-то не так с классом или наследованием при использовании с классом Scanner.

Примечание: это для моего колледжа, поэтому я не могу использовать файлы здесь.

codeWithSingleClass -Работает идеально

import java.io.*;
import java.lang.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int nooftestCases=scanner.nextInt();

        while(nooftestCases>0) {
            int n,k;
            int[] array = new int[20];
            int sumWithOutRemoval=0 , sumWithRemoval=0;
            n = scanner.nextInt();
            k = scanner.nextInt();
            sumWithOutRemoval = 0;
            for (int i = 0; i < n; i++) {
                array[i] = scanner.nextInt();
                sumWithOutRemoval += array[i];
            }
            if (k == 0) {
                double finalAns = (double) sumWithOutRemoval / n;
                System.out.println(String.format("%.6f", finalAns));
            } else {
                for (int i = 0; i < n; i++) {
                    for (int j = i; j < n; j++) {
                        if (array[i] < array[j]) {
                            int temp = array[i];
                            array[i] = array[j];
                            array[j] = temp;
                        }
                    }
                }
                sumWithRemoval = 0;
                for (int i = 1; i < n - 1; i++) {
                    sumWithRemoval += array[i];
                }
                double finalAns = (double) (sumWithRemoval / (n - (2 * k)));
                System.out.println(String.format("%.6f", finalAns));
            }
            nooftestCases--;
        }
    }
}

codeWithMultipleClasses-hasIssues

import java.io.*;
import java.lang.*;
import java.util.Scanner;

class Sample {

    static int n,k;
    static int[] array = new int[20];
    static int sumWithOutRemoval , sumWithRemoval;

    public void getDetails(){
        Scanner scanner2=new Scanner(System.in);
        n = scanner2.nextInt();
        k = scanner2.nextInt();
        sumWithOutRemoval = 0;
        for (int i = 0; i < n; i++) {
            array[i] = scanner2.nextInt();
            sumWithOutRemoval += array[i];
        }
    }
    public void displayDetails(){
        if (k == 0) {
            double finalAns = (double) sumWithOutRemoval / n;
            System.out.println(String.format("%.6f", finalAns));
        }
        else {
            for (int i = 0; i < n; i++) {
                for (int j = i; j < n; j++) {
                    if (array[i] < array[j]) {
                        int temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
            sumWithRemoval = 0;
            for (int i = 1; i < n - 1; i++) {
                sumWithRemoval += array[i];
            }
            double finalAns = (double) (sumWithRemoval / (n - (2 * k)));
            System.out.println(String.format("%.6f", finalAns));
        }
    }
}
public class Main extends Sample {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int nooftestCases=scanner.nextInt();
        Sample objname= new Sample();
        while(nooftestCases>0) {
            objname.getDetails();
            objname.displayDetails();
            nooftestCases--;
        }
    }
}

Мои данные

5
5 0
2 9 -10 25 1
5 1
2 9 -10 25 1
5 1
2 9 -10 25 1
5 0
2 9 -10 25 1
5 1
2 9 -10 25 1

ожидаемый результат

5.400000
4.000000
4.000000
5.400000
4.000000

1 Ответ

0 голосов
/ 13 января 2019

Ваш код имеет два Scanner экземпляра; они макетируют входной пар. Если мы изменим код для передачи Scanner scanner в объект Sample и используем его вместо scanner2, все в порядке.

т.е. как то так:

Scanner scanner = new Scanner(System.in);
int nooftestCases = scanner.nextInt();
Sample objname = new Sample(scanner);

И

class Sample {
    ...

    private final Scanner scanner;

    public Sample(Scanner scanner) {
        this.scanner = scanner;
    }

    public void getDetails() {
        n = scanner.nextInt();
        k = scanner.nextInt();
        sumWithOutRemoval = 0;
        for (int i = 0; i < n; i++) {
            array[i] = scanner.nextInt();
            sumWithOutRemoval += array[i];
        }
    }
...

Кроме того, есть больше возможностей для улучшения этого кода. Форматирование будет одним из них, особенно при публикации в Stack Overflow. Еще кое-что, что особенно ранит мои глаза, - это поля static (не говоря уже об их неопределенной области действия). Это может привести к тому, что подобный алгоритмический код хорошо работает в более широком приложении А что такое k и v (предлагая более описательные имена).

...