如果我只使用一个类,它工作得很好,但是当我使用多个类时,我面临一个问题,当我将输入作为一个批处理(复制粘贴)进行整体输入时,它不起作用(仍然等待)进行更多输入并且不执行任何操作),但是当我手动给出每个输入时,它工作得非常完美。

所以,当我引入一个新类时,这个问题就开始了,所以我猜想在与 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 

请您参考如下方法:

您的代码有两个 Scanner 实例;他们正在模拟输入 Steam 。如果我们更改代码以将 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字段(更不用说它们未指定的范围)。这可能会让像这样的算法代码在更广泛的应用程序中很好地工作。 kv 是什么(建议更具描述性的名称)。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!