2016-02-27 58 views
1
public static public static void main(String[] args) { 
    System.out.print("Enter the number of student names to input: "); 
    int studentNum = new Scanner(System.in).nextInt(); 
    String students[ ] = new String[studentNum]; 
    for(int i = 0; i<studentNum; i++){ 
     students[ i ] = inputStudent(i+1); 
    } 
} 

public static String[] inputStudent(int i) { 
    String studentNum[] = new String[i]; 
    for(int a=0; a<i; a++) { 
     System.out.print("Enter student name"+(a+1)+": "); 
     studentNum[a]=new Scanner(System.in).nextLine(); 
    } 
    return studentNum; 
} 

错误:Java的返回从阵列的方法数组的主要功能

students[ i ] = inputStudent(i+1); 

它说:

incompatible types: String[] cannot be converted to String 

PS: 主要功能不应该被修改。

+1

你能解释一下inputStudent函数的用途吗?它不应该返回一组学生,它应该读一个学生,并只是返回它。 – PyThon

回答

0

你可以做的做的是改变:

students[ i ] = inputStudent(i+1); 

students[ i ] = Arrays.toString(inputStudent(i + 1)); 

由于students是一个字符串,你无法直接将数组分配到String。通过使用Array.toString(),它将返回数组内容的表示形式,作为String值。

再看看你的问题,你无法修改主要。在这种情况下,我们可以将inputStudent设置为返回String类型。

public static String inputStudent(int i) 
{ 
    String studentNum[] = new String[i]; 
    for(int a = 0; a < i; a++) 
    { 
     System.out.print("Enter student name" + (a + 1) + ": "); 
     studentNum[a] = new Scanner(System.in).nextLine(); 
    } 
    return Arrays.toString(studentNum); 
} 

或短而甜。

public static String inputStudent(final int id) 
{ 
    System.out.print("Enter student name at ID: "+id+": "); 
    return new Scanner(System.in).next(); 
} 
1

您正在试图String数组分配给字符串

inputStudent(int i) 返回数组,但您要指定数组到students[ i ] = inputStudent(i+1); 作为 字符串[i]是元素字符串数组只接受字符串

+0

谁是downvoter? – Pragnani

-1

您的代码有错误。 For循环主要不需要

public static public static void main(String[] args) { 
    System.out.print("Enter the number of student names to input: "); 
    int studentNum = new Scanner(System.in).nextInt(); 
    String students[ ] = inputStudent(studentNum); 
} 

public static String[] inputStudent(int i) { 
    String studentNum[] = new String[i]; 
    for(int a=0; a<i; a++) { 
     System.out.print("Enter student name"+(a+1)+": "); 
     studentNum[a]=new Scanner(System.in).nextLine(); 
    } 
    return studentNum; 
} 
1

将您的方法更改为此。您无法将字符串数组分配给字符串。另外,你为什么要循环使用你的方法?如果我理解正确,你想添加n个学生到学生数组?你在每个学生的主循环和方法循环中循环。

public static String inputStudent(int i) { 
     System.out.print("Enter student name"); 
     String studentName = new Scanner(System.in).nextLine(); 
     return studentName; 
    } 
1

修改您的输入学生方法,使其仅返回一名学生。

public static String inputStudent(int i) { 
    String studentNam = null; 
    System.out.print("Enter student name"+i+": "); 
    studentNum=new Scanner(System.in).nextLine(); 
    return studentNum; 
} 
+0

你真的需要在这个函数中读'n'个学生吗?为什么这样? – PyThon

+0

如果他不能修改main,那么他不能从inputStudent返回一个String [],所以必须改变它。 – pczeus

+0

仍然不会用这种方法修改主要方法。我猜他在这两种方法中都有错误的逻辑。只有一个方法应该有一个for循环里面。 – PyThon

0

既然你规定的主要功能不能被修改,你将不得不从的String []更改inputStudent函数的返回类型为String。这意味着你必须改变你在这个函数中存储数据的方式。

因此,将字符串studentNum []更改为字符串studentNum,而不是为数组的每个索引要求新的用户输入,请求所有输入一次逗号分隔并将它们存储在studentNum中。

根据您的标准,这是一种可能的方法。

0

我明白你要实现什么,下面的代码会解决你的问题,每一行代码都有解释。

public static void main(String[] args) throws Exception { 
    System.out.print("Enter the number of student names to input: "); 
    Scanner scanner = new Scanner(System.in); // get the scanner 
    int numOfStudents = scanner.nextInt(); // get the number of students from user 
    String [] students = new String [numOfStudents]; // create an array of string 
    int studentAdded = 0; // counter 
    scanner = new Scanner(System.in); // recreate the scanner, if not it will skip the first student. 
    do { 
     System.out.println("Enter student name "+(studentAdded+1)+": "); 
     String studentName = scanner.nextLine(); // ask for student name 
     students[studentAdded] = studentName;  // add student name to array 
     studentAdded++;  // add 1 to the counter 
    } while (studentAdded < numOfStudents); // loop until the counter become the same size as students number 
    System.out.println("students = " + Arrays.toString(students)); // and show the result 
}