Java 通过输入与数据关联的名称查找数据
我正在为跑步者开发一个简单的统计程序。它只接受一场比赛的数据。在stackoverflow的帮助下,我运行了第一部分的代码! 我们的想法是,在比赛结束后,我们可以输入跑步者的姓名和时间。然后我希望通过搜索一个人的名字来搜索他的跑步时间(然后你会看到跑步者的名字和他们的时间显示在屏幕上。有没有可能用Java来实现这一点?)谢谢Cassy 这是我的密码Java 通过输入与数据关联的名称查找数据,java,arrays,sorting,Java,Arrays,Sorting,我正在为跑步者开发一个简单的统计程序。它只接受一场比赛的数据。在stackoverflow的帮助下,我运行了第一部分的代码! 我们的想法是,在比赛结束后,我们可以输入跑步者的姓名和时间。然后我希望通过搜索一个人的名字来搜索他的跑步时间(然后你会看到跑步者的名字和他们的时间显示在屏幕上。有没有可能用Java来实现这一点?)谢谢Cassy 这是我的密码 import java.util.Scanner; public class Trying { public static void main
import java.util.Scanner;
public class Trying
{
public static void main (String[] args)
{
int num;
Scanner input= new Scanner (System.in);
System.out.println("******************************************************************* ");
System.out.println("Welcome to Running Race Time Statistical Analysis Application");
System.out.println("******************************************************************* \n");
System.out.println("Please input number of participants (2 to 10)");
num=input.nextInt();
// If the user enters an invalid number... display error message...
while(num<2|| num >10)
{
System.out.println("Error invalid input! Try again! \nPlease input a valid number of participants (2-10)...");
num=input.nextInt();
}
// declare arrays
double resultArray [] = new double [num]; // create result array with new operator
String nameArray [] = new String [num];// create name array with new operator
// Using the num int will ensure that the array holds the number of elements inputed by user
// loop to take in user input for both arrays (name and result)
double count = 0;
for (int i = 0 ; i < nameArray.length ; i++)
{
System.out.println ("Please enter a race participant Name for runner " + (i+1) );
nameArray[i] = input.next();
System.out.println ("Please enter a race result (time between 0.00 and 10.00) for runner " + (i+1) );
resultArray[i] = input.nextDouble();
count += resultArray[i]; // This count variable is used later to calculate average from total
}
}
}
import java.util.Scanner;
公开课
{
公共静态void main(字符串[]args)
{
int-num;
扫描仪输入=新扫描仪(System.in);
System.out.println(“*******************************************************************************************************************”);
System.out.println(“欢迎使用跑步比赛时间统计分析应用程序”);
System.out.println(“******************************************************************************************************************************\n”);
System.out.println(“请输入参与者人数(2至10)”;
num=input.nextInt();
//如果用户输入的号码无效…显示错误消息。。。
while(num10)
{
System.out.println(“错误无效输入!重试!\n请输入有效的参与者人数(2-10)…”;
num=input.nextInt();
}
//声明数组
double-resultArray[]=new-double[num];//使用新运算符创建结果数组
字符串名称数组[]=新字符串[num];//使用新运算符创建名称数组
//使用numint将确保数组保存用户输入的元素数
//循环以接收两个数组的用户输入(名称和结果)
重复计数=0;
for(int i=0;i
如果您只希望用户能够搜索名称,请使用以下方法:
String entered;
while(true) {
entered = input.nextLine();
if(entered.equalsIgnoreCase("exit")) break;
for(int i = 0; i < nameArray.length; i++) {
if(entered.equals(nameArray[i])) {
System.out.println("Name: " + nameArray[i] + "\tTime: " + resultArray[i]);
}
}
}
输入的字符串;
while(true){
entered=input.nextLine();
如果(输入。相等信号情况(“退出”))中断;
for(int i=0;i
实现查找的最简单方法是使用哈希映射
或其他类型的映射
。它的执行效率也比一对数组更高。诀窍是在哈希映射
中存储所有姓名和时间,代码如下所示
Map<String, Double> raceTimes = new HashMap<>();
for (int i = 1; i <= participants; i++) {
// ... some code here to enter the name and the time
raceTimes.put(name, time);
}
Double time = raceTimes.get(nameEntered);
if (time != null) {
System.out.println(nameEntered + " has a time of " + time);
}
如果用户输入的名称与其中一个参与者不对应,则会进行空检查。实际查找只是一个表达式raceTimes.get(nameintered)
-这比使用两个数组循环查找所需的值要简单得多
我冒昧地将所有这些结合在一起,为您提供了一个完整的解决方案。您可以看到,我还改变了其他一些事情
- 我将其分解为不同的方法,因为
的长度越来越长main
- 我已将提示参与者姓名的提示更改为使用
,因为nextLine
只读取一个单词。这将使参与者的姓名由多个单词组成。但除了此更改之外,我还必须在调用next
和nextLine
nextDouble之后添加一个额外的调用
de>,因为对nextLine
或nextLine
的调用不会读取数字后面的换行符-因此您需要额外的nextDouble
来读取换行符nextLine
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class RaceTimes{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("******************************************************************* ");
System.out.println("Welcome to Running Race Time Statistical Analysis Application");
System.out.println("******************************************************************* \n");
int participants = enterNumberOfParticipants(input);
Map<String, Double> raceTimes = enterTimes(input, participants);
lookupTimes(input, raceTimes);
input.close();
}
private static int enterNumberOfParticipants(Scanner input) {
System.out.println("Please input number of participants (2 to 10)");
int num = input.nextInt();
while (num < 2 || num > 10) {
System.out.println("Error invalid input! Try again! \nPlease input a valid number of participants (2-10)...");
num = input.nextInt();
}
input.nextLine();
return num;
}
private static Map<String, Double> enterTimes(Scanner input, int participants) {
Map<String, Double> raceTimes = new HashMap<>();
// loop to take in user input for both arrays (name and result)
double totalTime = 0;
for (int i = 1; i <= participants; i++) {
System.out.println("Please enter a race participant Name for runner " + i);
String name = input.nextLine();
System.out.println("Please enter a race result (time between 0.00 and 10.00) for runner " + i);
Double time = input.nextDouble();
input.nextLine();
totalTime += time;
raceTimes.put(name, time);
}
System.out.println("Average time is " + totalTime / participants);
return raceTimes;
}
private static void lookupTimes(Scanner input, Map<String, Double> raceTimes) {
while(true) {
System.out.println("Please enter a name that you'd like to know the time for, or type quit.");
String nameEntered = input.nextLine();
if(nameEntered.equalsIgnoreCase("quit")) {
return;
}
Double time = raceTimes.get(nameEntered);
if (time != null) {
System.out.println(nameEntered + " has a time of " + time);
} else {
System.out.println("There is no participant called " + nameEntered);
}
}
}
}
import java.util.HashMap;
导入java.util.Map;
导入java.util.Scanner;
公务舱赛马时间{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“*******************************************************************************************************************”);
System.out.println(“欢迎使用跑步比赛时间统计分析应用程序”);
System.out.println(“******************************************************************************************************************************\n”);
int参与者=输入NumberOfParticipants(输入);
地图比赛时间=输入时间(输入,参与者);
查找时间(输入、比赛时间);
input.close();
}
私有静态int enterNumberOfParticipants(扫描仪输入){
System.out.println(“请输入参与者人数(2至10)”;
int num=input.nextInt();
而(num<2 | | num>10){
System.out.println(“错误无效输入!重试!\n请输入有效的参与者人数(2-10)…”;
num=input.nextInt();
}
input.nextLine();
返回num;
}
专用静态地图输入时间(扫描仪输入,整数参与者){
Map raceTimes=new HashMap();
//循环以接收两个数组的用户输入(名称和结果)
双倍总时间=0;
对于(int i=1;i是的,这是可能的,并且您的代码看起来大体上是可行的。但是,请注意,这种“并行数组”设计强烈地表明,您应该使用一个带有字段name
和result
的类Runner
,以及一个数组(或者更好的是,List
)关于Runner
对象。它本质上是一个按名称搜索的功能,我希望实现它。谢谢chrylis,但我不知道如何实现它!只是在这里发展我的Java技能!它们目前非常基本,但希望能快速学习!这里最简单的方法是将名称和时间存储在