有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从扫描仪读取多个输入

(我是Java的初学者) 我正试图编写一个程序,使用扫描仪向用户索要6位数字,然后从这6位数字中找出第二高的数字。到目前为止,这是可行的,但是我希望从一行读取输入,而不是从6行单独读取。我听说过分隔符和标记化,但不知道如何实现它。我想让它读作“输入6位数字:123456”,并将每个数字解析为一个单独的变量,这样我就可以将它们放入一个数组中,如图所示。如果有人能给我一个如何工作,这将是非常感谢我的运行情况。为你的时间干杯

    public static void main(String[] args)
    {
        //Ask user input 
        System.out.println("Enter 6 digits: ");            
        //New Scanner
        Scanner input = new Scanner(System.in);

        //Assign 6 variables for each digit
        int num1 = input.nextInt();            
        int num2 = input.nextInt();            
        int num3 = input.nextInt();            
        int num4 = input.nextInt();            
        int num5 = input.nextInt();            
        int num6 = input.nextInt();            

      //unsorted array
      int num[] = {num1, num2, num3, num4, num5, num6};     
      //Length 
      int n = num.length;     
       //Sort 
      Arrays.sort(num);
       //After sorting
      // Second highest number is at n-2 position

       System.out.println("Second highest Number: "+num[n-2]);

 }           
}   

共 (3) 个答案

  1. # 1 楼答案

    当然,有很多方法可以做到这一点。我给你两种方法: 1.使用lambda函数-这种方法更先进,但非常实用:

    Integer[] s = Arrays.stream(input.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
    
    • 首先创建一个流,你可以在这里阅读更多关于流的信息
    • 而不是读整行“1 2 3….”
    • 将线按空格“”拆分,在这一点之后,流将看起来像[“1”、“2”、“3”…]
    • 要将字符串转换为int,请使用“map”运算符
    • 最后将流收集为整数[]

      1. 您可以根据需要多次使用迭代器和循环,并从控制台读取

        int num[] = new int[6]; for (int i = 0; i < 6; i++) { num[i] = input.nextInt(); }

  2. # 2 楼答案

    有几种方法可以做到这一点:

    取一行字符串,然后解析它

            Scanner input = new Scanner(System.in);
    
            ....
            String numString = input.nextLine();
            String[] split = numString.split("\\s+");
            int num[] = new int[split];
            // assuming there will be always atleast 6 numbers.
            for (int i = 0; i < split.length; i++) {
                num[i] = Integer.parseInt(split[i]);
            }
            ... 
          //Sort 
          Arrays.sort(num);
           //After sorting
          // Second highest number is at n-2 position
    
           System.out.println("Second highest Number: "+num[n-2]);
    
    
  3. # 3 楼答案

    你的解决方案已经准备好了

    如果你浏览scaner的文档,你会发现你的代码使用不同的输入,只要它们是由空格和/或行分隔符分隔的整数

    但你可以优化你的代码,让它看起来更好:

    public static void main6(String[] args) {
        // Ask user input
        System.out.println("Enter 6 digits: ");
        // New Scanner
        Scanner input = new Scanner(System.in);
    
        // Assign 6 variables for each digit
        int size=6;
        int[] num=new int[size];
        for (int i=0;i<size;i++) {
            num[i]=input.nextInt();
        }
        Arrays.sort(num);
        // After sorting
        // Second highest number is at n-2 position
    
        System.out.println("Second highest Number: " + num[size - 2]);
    }
    

    作为一个额外的提示,我想提到的是,这段代码仍然会产生大量开销,您可以通过使用:

    public static void main7(String[] args) {
        // Ask user input
        System.out.println("Enter 6 digits: ");
        // New Scanner
        Scanner input = new Scanner(System.in);
    
        // Assign 6 variables for each digit
        int size=6;
        int highest=Integer.MIN_VALUE;
        int secondhighest=Integer.MIN_VALUE;
        for (int i=0;i<size-1;i++) {
            int value=input.nextInt();
            if (value>highest) {
                secondhighest=highest;
                highest=value;
            } else if (value>secondhighest) {
                secondhighest=value;
            }
        }
        //give out second highest
        System.out.println("Second highest Number: " + secondhighest);
    }
    

    如果您不喜欢在有多个“最高点”的情况下指向“最高点”,则可以在以下情况下替换“其他点”:

    public static void main7(String[] args) {
        // Ask user input
        System.out.println("Enter 6 digits: ");
        // New Scanner
        Scanner input = new Scanner(System.in);
    
        // Assign 6 variables for each digit
        int size = 6;
        int highest = Integer.MIN_VALUE;
        int secondhighest = Integer.MIN_VALUE;
        for (int i = 0; i < size - 1; i++) {
            int value = input.nextInt();
            if (value > highest) {
                secondhighest = highest;
                highest = value;
            } else if (secondhighest==Integer.MIN_VALUE&&value!=highest) {
                secondhighest=value;
            }
        }
        // give out second highest
        System.out.println("Second highest Number: " + secondhighest);
    }