java - 使用多个类并在单个类中正常工作时,一次全部输入时出错
问题描述
如果我只使用一个类,它可以完美运行,但是当我使用多个类时,我面临一个问题,当我将输入作为一个整体(复制粘贴)提供时,它不起作用(仍然等待更多输入并且什么都不做),但是当我手动输入每个输入时,它工作得很好。
所以,当我引入一个新类时,这个问题就开始了,所以我猜想在使用 Scanner 类时,类或继承有问题。
注意:这是为了我的大学 elab,所以我不能在这里使用文件。
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
实例;他们正在模拟输入蒸汽。如果我们更改代码以将 传递给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
(建议更具描述性的名称)。
推荐阅读
- mongodb - 如何使用 pymongo 在 mongodb 中批量插入文档,同时跳过重复项
- reactjs - Firebase 使用 github 操作成功部署了 react 应用程序,但尽管在 firebase.json 中设置了“public”:“build”,但仍会导致空白屏幕
- javascript - HTML 输入在移动设备上通过内容进行裁剪
- php - mysql循环问题
- php - 使用 JS 将内容放在 AFTER 之后的 PHP 抓取网站
- python - 将 Python Discord Bot 发送给 DM 硬编码接收者加入的人的姓名
- python - 将条件应用于 Odoo 14 中的 OOTB“编辑”按钮
- java - Mac 上的 Eclipse 不允许我选择文件
- amazon-web-services - 多个 aws s3 同步命令 - 操作顺序
- reactjs - 使用按钮选择动态 - reactjs