Как напечатать имя значения из разделенной строки в java? - PullRequest
0 голосов
/ 10 апреля 2020

Я должен написать программу, которая запрашивает имя и возраст людей, а затем печатает имя самого старого человека. (Извините, некоторые части программирования не написаны на английском sh, но я надеюсь, что кто-то понимает достаточно, чтобы помочь). Это задание, и я должен сделать это, разделив строку.

Печать должна быть такой:

Джеймс, 2 Мэри, 2 Джессика, 1 Дженнифер, 5 Габриэль, 10

Имя старшего: Габриэль

Я знаю, как напечатать самый высокий возраст, но не знаю его имя. Вот как я это сделал:

public static void main(String[] args) {
    Scanner lukija = new Scanner(System.in);

    int oldest = -1;
    while (true) {
        String mjono = lukija.nextLine();
        if (mjono.equals("")) {
            break;
        }
        String[] pieces = mjono.split(",");
        int age = Integer.valueOf(pieces[1]);
        if (age > oldest) {
            oldest = age;
        }
    }
    System.out.println("The oldest age: " + oldest);

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Допустим, у нас есть ввод:

James,2
Mary,2
Jessica,1
Jennifer,5
Gabriel,10

Мы можем читать строку за строкой, а затем получать самого старого человека по следующему классу:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;

public class OldestPerson {
    public static class Person {
        private String name;
        private int age;

        Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public int getAge() {
            return this.age;
        }

        public String getName() {
            return this.name;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line;
        PriorityQueue<Person> queue = new PriorityQueue<Person>((a, b) -> b.getAge() - a.getAge());
        while ((line = reader.readLine()) != null) {
            String[] tmp = line.split(",");
            queue.add(new Person(tmp[0], Integer.parseInt(tmp[1])));
        }
        if (!queue.isEmpty()) {
            Person oldestPerson = queue.poll();
            System.out.println(oldestPerson.getName());
        }
    }
}

Другой способ сделать это просто сравнение возраста человека напрямую:

public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String line;
    String oldestPerson = "";
    int age = Integer.MIN_VALUE;
    while ((line = reader.readLine()) != null) {
        String[] tmp = line.split(",");
        if (age < Integer.parseInt(tmp[1])) {
            age = Integer.parseInt(tmp[1]);
            oldestPerson = tmp[0];
        }
    }
    System.out.println(oldestPerson);
}
0 голосов
/ 10 апреля 2020

Вы можете присвоить переменную имени старшего человека и изменить его при изменении максимального возраста:

Scanner lukija = new Scanner(System.in);
int oldest = -1;
String oldestPerson = ""; //add this
while (true) {
     String mjono = lukija.nextLine();
     if (mjono.equals("")) {
          break;
     }
     String[] pieces = mjono.split(",");
     int age = Integer.valueOf(pieces[1]);
     if (age > oldest) {
          oldest = age;
          oldestPerson = pieces[0]; //add this
     }
}
System.out.println("The oldest person: " + oldestPerson); //print this instead
...