java:数据读取问题

第一行是某天前来挂号就诊的病人数 n。(1≤n≤200)

其后有 n 行,每行是病人的信息,包括三个信息:姓名(字符串,不含空格,最多 8 个字符)、体温(在 [36.0,40.0] 范围内)、是否咳嗽(1表示咳嗽,0表示不咳嗽)。每行三个信息之间以一个空格分开

5
Zhang 38.3 0
Li 37.5 1
Wang 37.1 1
Zhao 39.0 1
Liu 38.2 1

怎么使用Scanner将输入信息读入java的数组或者集合中?

由于是同时输入多行参数, 可以使用先收集、再解析的方式处理:

import lombok.Data;

import java.util.Arrays;
import java.util.Scanner;

public class Input {

    public static void main(String[] args) {
        //separator为行分隔符
        String separator = System.getProperty("line.separator");
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        String line;
        //直接在新行回车退出循环
        while (true) {
            line = sc.nextLine();
            if (null == line || line.equals(""))
                break;
            sb.append(line);
            sb.append(separator);
        }
        String[] input = sb.toString().split(separator);
        int n = Integer.parseInt(input[0]);// 第一行是行数
        Patient[] patients = new Patient[n];
        Patient patient;
        for (int i = 0; i < n; i++) {// 从第二行开始到结束, 每一行都是病人信息
            patient  = new Patient(input[i + 1].split(" "));
            patients[i] = patient;
        }
        System.out.println("病人:" + Arrays.toString(patients));
    }

}

@Data
class Patient {

    private String name;
    private Double temperature;
    private Integer ifCough;

    public Patient() {
    }

    public Patient(String[] line) {
        if (null == line || 3 != line.length) {
            this.name = "";
            this.temperature = 0.0d;
            this.ifCough = 0;
        } else {
            this.name = line[0];
            this.temperature = Double.valueOf(line[1]);
            this.ifCough = Integer.valueOf(line[2]);
        }
    }

}

执行结果:

编辑不易, 若符合, 望采纳

整行读取啊,第一行数据另存,其它行数据根据空格split成数组

package com.java3.Test;

import java.util.Scanner;

public class Input {
    public static void main(String[] args) {
        Scanner scan  = new Scanner(System.in);
        String amount = scan.nextLine();

        int n = Integer.parseInt(amount);

        for(int i = 0;i < n;i++){
            String tempStr = scan.nextLine();
            System.out.println(tempStr);
        }
    }
}

输入信息在控制台之后,还需要继续输入,程序没有结束


 

代码思路:

  1. 第一次输入指定n个病人
  2. 此后获取每次输入的内容, 按照" "(空格)分割得到String数组
  3. 使用每次的String数组创建病人对象, 并放入病人数组(patients)
  4. 打印数组。

 

Demo:

import lombok.Data;

import java.util.Arrays;
import java.util.Scanner;

public class Input {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入行数n:");
        int n = scan.nextInt();
        System.out.println("n = " + n);
        Patient[] patients = new Patient[n];
        Patient patient;
        for (int i = 0; i < n; i++) {
            System.out.println("请逐行输入病人信息, 第 " + (i + 1) + "/" + n + " 行");
            patient  = new Patient(new Scanner(System.in).nextLine().split(" "));
            patients[i] = patient;
        }
        System.out.println("病人:" + Arrays.toString(patients));
    }

}

@Data
class Patient {

    private String name;
    private Double temperature;
    private Integer ifCough;

    public Patient(){}

    public Patient(String[] line){
        if (null == line || 3 != line.length) {
            this.name = "";
            this.temperature = 0.0d;
            this.ifCough = 0;
        } else {
            this.name = line[0];
            this.temperature = Double.valueOf(line[1]);
            this.ifCough = Integer.valueOf(line[2]);
        }
    }

}

 

运行结果:

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632