[英]Error with taking inputs all at once , when Using multiple classes and works fine in single class
如果我只使用一個類,它會完美工作,但是當我使用多個類時,我會遇到一個問題,當我將批處理的整個輸入(復制粘貼)提供時,它不起作用(仍在等待更多輸入,但什么也沒做),但是當我手動輸入每個輸入時,效果就很好。
因此,當我引入一個新類時,這個問題就開始了,所以我猜想在與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
實例; 他們正在模擬輸入蒸汽。 如果我們更改代碼以將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
是什么(建議使用更具描述性的名稱)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.