在java中读取多行时,是否有可能解决拆分函数的最佳解决方案?
输入以单行中测试用例的数量t开始(t您关心性能,我看到您对这些问题有一定的了解(考虑电源时间复杂性),但我认为您并不完全理解这意味着什么 仅仅因为你的程序有嵌套循环,并不意味着它的效率(远)低于一个单循环。外循环迭代每行,内循环迭代令牌(数量不同),所以总迭代次数就是令牌的总数,与任何幂律无关 性能方面的主要问题是,您的代码太多,无法完成一件非常简单的事情,并且您正在使用临时数组、扫描仪和解析器,这都会增加它的开销。您可以使用以下代码读取包含它的文件:在java中读取多行时,是否有可能解决拆分函数的最佳解决方案?,java,optimization,java.util.scanner,string-split,Java,Optimization,Java.util.scanner,String Split,输入以单行中测试用例的数量t开始(t您关心性能,我看到您对这些问题有一定的了解(考虑电源时间复杂性),但我认为您并不完全理解这意味着什么 仅仅因为你的程序有嵌套循环,并不意味着它的效率(远)低于一个单循环。外循环迭代每行,内循环迭代令牌(数量不同),所以总迭代次数就是令牌的总数,与任何幂律无关 性能方面的主要问题是,您的代码太多,无法完成一件非常简单的事情,并且您正在使用临时数组、扫描仪和解析器,这都会增加它的开销。您可以使用以下代码读取包含它的文件: import java.util.Scan
import java.util.Scanner;
public class Scan {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
int i;
while (keyboard.hasNext()) {
try {
i = keyboard.nextInt();
System.out.println(i);
} catch(Exception e) {
// Whatever
System.err.println(e.getMessage());
System.exit(1);
}
}
}
}
这将完成您的类所做的大部分工作,并捕获异常。它唯一不做的事情是读取行的初始计数。实际上,在扫描仪中计数行是很困难的,因为它并不真正支持它,但也许您可以不使用它或使用其他解决方案。而不是
StringTokenizer
您可以使用split()
方法。为什么不通过?@Prashant读取输入流?这将如何改变时间复杂度?@TagirValeev您能否提供一个指导链接或说明可能的解决方法,因为这些值必须用于求和too@TagirValeev请参见顶部提到的要求
50
100
100
50
105
import java.util.Scanner;
import java.util.StringTokenizer;
public class Generation {
public static void main(String[] str) {
Scanner keyboard = new Scanner(System.in);
int inputSize;
do {
System.out.println("Enter the value of T Size");
inputSize = keyboard.nextInt();
keyboard.nextLine();
if (inputSize < 2 || inputSize > 10) {
System.out.println("Not a Valid Input Size");
}
} while (inputSize < 2 || inputSize > 10);
String[] inputValue = new String[inputSize];
int tokenCount = 0;
for (int i = 0; i < inputSize; i++) {
System.out.println("Enter the inputs");
inputValue[i] = keyboard.nextLine();
StringTokenizer strToken = new StringTokenizer(inputValue[i], " ");
tokenCount += strToken.countTokens();
}
keyboard.close();
//suppose this is 2nd part
int[] splitedString = new int[tokenCount];
int tempTokenCount = 0;
for (int i = 0; i < inputSize; i++) {
String[] tempSplitArray = inputValue[i].split(" ");
for (int j = 0; j < tempSplitArray.length; j++) {
splitedString[tempTokenCount] = Integer
.parseInt(tempSplitArray[j]);
tempTokenCount++;
}
}
/*for (String s : inputValue) {
System.out.println(s);
}*/
for (Integer s : splitedString) {
System.out.println(s);
}
}
}
import java.util.Scanner;
public class Scan {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
int i;
while (keyboard.hasNext()) {
try {
i = keyboard.nextInt();
System.out.println(i);
} catch(Exception e) {
// Whatever
System.err.println(e.getMessage());
System.exit(1);
}
}
}
}