Abaixo está o que eu tenho agora. A primeira coisa que eu só preciso saber é como posso verificar o número de caracteres de um texto, dentro de uma matriz, e depois verificar que, contra todas as outras entradas e só puxar o maior. A pergunta que eu estou lidando com:
Escreva um programa que lê nomes e anos de nascimento do usuário até que uma linha vazia é inserido. O nome e ano de nascimento são separadas por uma vírgula.
Depois que o programa imprime o nome mais longo e a média dos anos de nascimento. Se vários nomes são igualmente mais longo, você pode imprimir qualquer um deles. Você pode supor que o usuário digita pelo menos uma pessoa. Exemplo de saída
sebastian, 2017 Lucas, 2017 lírio de 2017 hanna de 2014 gabriel de 2009
nome mais longo: Médio sebastian dos anos de nascimento: 2014,8
import java.util.Scanner;
public class Test112 {
//Asks the user for input and will print out who is the oldest
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int checkVal = 0;
String checkName = null;
System.out.println("Provide a name and age in this format: name,#");
while (true) {
//The unique thing about this code, is each input is a separate array that is not put in memory
//You just use the array system to pull data of the values entered at that specific time
String userIn = scanner.nextLine();
if (userIn.equals("")) {
break;
}
//Here we get the info from the user, then split it
String[] valArray = userIn.split(",");
//This now uses the variable to check which value of arguments entered is the greatest
//It'll then assign that value to the variable we created
**if (checkVal < Integer.valueOf((int)valArray[0].length) {**
//We need the checkVal variable to be a constant comparison against new entries
checkVal = Integer.valueOf(valArray[1]);
//This pulls the name of the value that satisfies the argument above
checkName = valArray[0];
}
}
System.out.println("Name of the oldest: " + checkName);
scanner.close();
}
}
Como posso contar o número de caracteres em um valor da cadeia, dentro de uma matriz, e depois compará-lo com os outros a encontrar o caminho mais longo?
Fazê-lo da seguinte forma:
if (checkVal < valArray[0].length()) {
checkVal = valArray[0].length();
checkName = valArray[0];
}
Note-se que length()
é usado para encontrar o comprimento de um String
.
Alguns outros pontos importantes:
- Você também precisa de uma variável para armazenar a soma de todos os anos de nascimento de modo que você pode calcular sua média. Alternativamente, você pode calcular a média em execução.
- Apare as entradas (nome e nascimento ano) antes de realizar qualquer operação sobre eles.
- Não feche o
Scanner
paraSystem.in
.
Dada a seguir é o programa completo incorporando as notas:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int checkVal = 0;
String checkName = "", name, birthYearStr;
int sum = 0, count = 0;
while (true) {
System.out.print("Provide a name and age in this format: name,#");
String userIn = scanner.nextLine();
if (userIn.equals("")) {
break;
}
String[] valArray = userIn.split(",");
name = valArray[0].trim();
birthYearStr = valArray[1].trim();
if (valArray.length == 2 && birthYearStr.length() == 4) { // Birth year should be of length 4
try {
sum += Integer.parseInt(birthYearStr);
if (checkVal < name.length()) {
checkVal = name.length();
checkName = name;
}
count++;
} catch (NumberFormatException e) {
System.out.println("Birth year should be an integer. Please try again.");
}
} else {
System.out.println("This is an invalid entry. Please try again.");
}
}
System.out.println("Longest name: " + checkName);
System.out.println("Average of birth years: " + (sum / count));
}
}
Uma corrida de amostra:
Provide a name and age in this format: name,#sebastian,2017
Provide a name and age in this format: name,#lucas,2017
Provide a name and age in this format: name,#lily,2017
Provide a name and age in this format: name,#hanna,2014
Provide a name and age in this format: name,#gabriel,2009
Provide a name and age in this format: name,#
Longest name: sebastian
Average of birth years: 2014
Outra corrida de amostra:
Provide a name and age in this format: name,#sebastian,201
This is an invalid entry. Please try again.
Provide a name and age in this format: name,#sebastian,hello
This is an invalid entry. Please try again.
Provide a name and age in this format: name,#sebastian,2017
Provide a name and age in this format: name,#lucas,2017
Provide a name and age in this format: name,#lily,2017
Provide a name and age in this format: name,#hanna,2014
Provide a name and age in this format: name,#gabriel,2009
Provide a name and age in this format: name,#
Longest name: sebastian
Average of birth years: 2014
Outra corrida de amostra:
Provide a name and age in this format: name,#hello,2018,sebastian,2017
This is an invalid entry. Please try again.
Provide a name and age in this format: name,#hello,2018
Provide a name and age in this format: name,#sebastian,2017
Provide a name and age in this format: name,#
Longest name: sebastian
Average of birth years: 2017
Outra corrida de amostra:
Provide a name and age in this format: name,#sebastian,rama
Birth year should be an integer. Please try again.
Provide a name and age in this format: name,#sebastian,12.5
Birth year should be an integer. Please try again.
Provide a name and age in this format: name,#sebastian,2017
Provide a name and age in this format: name,#abcdefghi,2018
Provide a name and age in this format: name,#rama,2009
Provide a name and age in this format: name,#
Longest name: sebastian
Average of birth years: 2014
Outra corrida de amostra:
Provide a name and age in this format: name,#sebastian,2017
Provide a name and age in this format: name,#lucas,2017
Provide a name and age in this format: name,#lily , 2017
Provide a name and age in this format: name,#
Longest name: sebastian
Average of birth years: 2017