看代码,你上边要求数组长度是十,所以我给他固定死,不过你要想让用户自己输入也行。改一两句就行了,你自己看看
底下这个只是你这个类里边的,main函数中调用也很方便
因为数组的初始化在这个函数中inputStudentName()所以开始你必须先调用它,才能对数组进行赋值
package com.hello.java;
import java.util.Arrays;
import java.util.Scanner;
public class StudentManage {
private String[] studentName;//存储学生姓名
Scanner scanner=new Scanner(System.in);
/**
初始化学生姓名数组,长度为10
@param length */
public void initArray(int length){
studentName=new String[length];
}
/**
利用键盘输入学生姓名,输入姓名必须用拼音或英文 */
public void inputStudentName(){
int length=10;
initArray(length);
int flag=0;
String str=null;
boolean result=false;
for(int i=0;i<length;i++) {
System.out.println("请输入第"+(i+1)+"个学生的姓名");
//此循环是判断是否输入为非字母,如果出现非字母,则一直提示输入知道出现全是字母为止,即将退出
do {
str=scanner.next();
//利用正则表达式进行判断是否都为字母
//如果都是字母则返回true 否则false
result = str.matches("[a-zA-Z]+");
//如果为false则提示
if(!result) {
System.out.println("请输入字母");
}
}while((str==null)||(result==false));//终止循环条件
studentName[i]=str;//对数组进行初始化
}
}
/**
对学生姓名按字典顺序从A到Z进行排序,可以采用冒泡或其他排序方法 */
public void sortStudentName(){
Arrays.sort(studentName);
}
/**
利用键盘输入某个学生姓名,利用折半查找法从排序后的学生名单中找出此人在数组中的位置,并返回结果:
如果找到结果格式:姓名:位置:;如果未找到就返回:查出此人
@return
*/
//注意:此处返回的是排序后的数组的位置
public String getSingleStudentName(){
//在调用二分法查找的方法时必须先对数组进行排序
sortStudentName();
System.out.println("请输入要查找学生的姓名");
String name=scanner.next();
int index=Arrays.binarySearch(studentName, name);
System.out.println(index);
String result="";
if(index<=-1) {
result="查无此人";
}
if((index>-1)&&(index<10)) {
result="姓名:"+name+" "+"位置:"+(index+1);
}
return result;
}
}
main函数调用
package com.hello.java;
public class Main {
public static void main(String[] args) {
StudentManage sManage=new StudentManage();
sManage.inputStudentName();
String string=sManage.getSingleStudentName();
System.out.println(string);
}
}
如果回答了你的问题,请采纳,如果还需修改的地方可以提出来