这是我的测试类:
import java.util.Scanner;
public class test {
public static void main (String[] args){
Film[] f = new Film[10];
Scanner input = new Scanner(System.in);
for (int i=0;i<10;i++){
f[i] = new Film();
System.out.println("Enter Title:");
f[i].setTitle(input.nextLine());
System.out.println("Enter Film Length:");
f[i].setLength(input.nextDouble());
}
}
}
我在我的对象类 Film 中有 getter 和 setter 方法。这里的问题是输出结果为:
Enter Title:
title1
Enter Film Length:
1
Enter Title:
Enter Film Length:
2
Enter Title:
Enter Film Length:
3
Enter Title:
Enter Film Length:
我将如何修复我的代码,以便它要求 10 个用户输入的标题和长度,并在最后显示所有电影标题和长度?
谢谢。
*我还有一个toString方法:
public String toString(){
return "Title: "+title+" Length: "+length;
}
您的代码在两次迭代后跳过询问标题,因为您使用 nextLine() 获取标题。在这种情况下,您必须使用 next()。
例如,在您的代码中,如果第一个 input.nextDouble() 收到,
1n
然后,nextDouble() 只取值 "1",并将 "" 传递给第二次迭代的 nextLine()。
最后,nextLine() 将 "" 读作换行符,nextDouble() 在第二次迭代中及之后立即执行。
整个修订后的代码如下。
import java.util.Scanner;
public class test {
public static void main (String[] args){
Film[] f = new Film[10];
Scanner input = new Scanner(System.in);
for (int i = 0; i < 10; i++){
f[i] = new Film();
System.out.println("Enter Title:");
f[i].setTitle(input.next());
System.out.println("Enter Film Length:");
f[i].setLength(input.nextDouble());
}
input.close();
for (int i = 0; i < 10; i++) {
System.out.println(f[i]);
}
}
}
class Film {
private String title;
private double length;
public Film() {
}
public void setTitle(String title) {
this.title = title;
}
public void setLength(double length) {
this.length = length;
}
public String toString() {
return "Title: "+title+" Length: "+length;
}
}
在第一个 for 循环之后,写:
for(Film currentFilm : f)
{
System.out.println(currentFilm);
}
即
import java.util.Scanner;
public class test {
public static void main (String[] args){
Film[] f = new Film[10];
Scanner input = new Scanner(System.in);
for (int i=0;i<10;i++){
f[i] = new Film();
System.out.println("Enter Title:");
f[i].setTitle(input.nextLine());
System.out.println("Enter Film Length:");
f[i].setLength(input.nextDouble());
}
for(Film currentFilm : f)
{
System.out.println(currentFilm);
}
}
}