所以这是我的测试类:
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;
}
答案 0 :(得分:2)
您的代码会在两次迭代后跳过询问标题,因为您使用 nextLine()来获取标题。在这种情况下,您必须使用 next()。
在您的代码中,如果第一个 input.nextDouble()收到,例如,
1\n
然后, nextDouble()只取值“1”,“\ n”传递给第二次迭代的 nextLine()。
最后, nextLine()将“\ n”作为新行读取, 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;
}
}
答案 1 :(得分:0)
在第一个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);
}
}
}