在java中读取多行时,是否有可能解决拆分函数的最佳解决方案?

在java中读取多行时,是否有可能解决拆分函数的最佳解决方案?,java,optimization,java.util.scanner,string-split,Java,Optimization,Java.util.scanner,String Split,输入以单行中测试用例的数量t开始(t您关心性能,我看到您对这些问题有一定的了解(考虑电源时间复杂性),但我认为您并不完全理解这意味着什么 仅仅因为你的程序有嵌套循环,并不意味着它的效率(远)低于一个单循环。外循环迭代每行,内循环迭代令牌(数量不同),所以总迭代次数就是令牌的总数,与任何幂律无关 性能方面的主要问题是,您的代码太多,无法完成一件非常简单的事情,并且您正在使用临时数组、扫描仪和解析器,这都会增加它的开销。您可以使用以下代码读取包含它的文件: import java.util.Scan

输入以单行中测试用例的数量t开始(t您关心性能,我看到您对这些问题有一定的了解(考虑电源时间复杂性),但我认为您并不完全理解这意味着什么

仅仅因为你的程序有嵌套循环,并不意味着它的效率(远)低于一个单循环。外循环迭代每行,内循环迭代令牌(数量不同),所以总迭代次数就是令牌的总数,与任何幂律无关

性能方面的主要问题是,您的代码太多,无法完成一件非常简单的事情,并且您正在使用临时数组、扫描仪和解析器,这都会增加它的开销。您可以使用以下代码读取包含它的文件:

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);
            }
        }
    }
}