顶部的方法,它被声明为全局变量,因为它实际上没有任何东西。
public class java_1 {
static Scanner stdin = new Scanner(System.in);
import java.util.Scanner;
这是用于声明它的代码,如果你能以另一种方式声明它,我可以获得文档的链接。
public class java_1 {
static Scanner stdin = new Scanner(System.in);
static String getLastName (String Name){
String lastName;
int spacePos,length;
spacePos = fullName.indexOf("");
length = fullName.length();
lastName = fullName.substring(spacePos + 1);
return lastName;
}
static String getInitial (String fullName){
String initial;
initial = fullName.substring(0,1);
return initial;
}
static String =Name (){
String fullName;
String userName;
String initial;
String lastName;
System.out.println("name");
fullName = stdin.nextLine();
initial = getInitial(fullName);
lastName = getLastName(fullName);
userName = initial + lastName;
System.out.println(userName);
return userName;
}
static String printuserName (){
String fullName,userName,initial,lastName;
System.out.println("enter name");
fullName = stdin.nextLine();
initial = getInitial(fullName);
userName = initial + lastName;
System.out.println("username: " + userName);
return userName;
}
static int menu(){
int choice;
System.out.println("Input a number from the table, corresponding to the task required");
System.out.println("1 = User name");
System.out.println("2 = Factor");
System.out.println("3 = Quit");
choice = stdin.nextInt();
while (choice != 1){
System.out.println("Re enter");
choice = stdin.nextInt();
}
return choice;
}
}
}
}
答案 0 :(得分:1)
错误是由getInitial()
内的这行代码生成的:
initial = fullName.substring(0,1);
StringIndexOutOfBoundsException意味着1
超出了字符串的末尾(意味着输入字符串为空)。如果您还不熟悉正在使用的任何IDE中的逐行调试,那么这是一个尝试的好时机。您可以单步执行代码以确定将空字符串传递到getInitial()
的原因。
答案 1 :(得分:1)
问题在于,当您使用stdin.nextInt()
读取菜单选项时,扫描仪中仍会有换行符。当你稍后调用stdin.nextLine()
时,你会获得剩余的一行 - 这只是一个空字符串。在对nextLine()
进行跟进调用之前,不会读取名称本身。
要解决此问题,您应该在nextLine()
方法中致电nextInt()
后立即致电Menu()
,以清除额外的换行符。