提问人:iMadeThisToAsk 提问时间:9/9/2018 最后编辑:Nicholas KiMadeThisToAsk 更新时间:4/26/2023 访问量:90
显示多条线,这些线可以在运行时使用一台扫描仪同时保存和接受输入
Displaying Multiple Lines that can hold and accept inputs at the same time while at runtime with one scanner
问:
我正在使用 do while 循环
public class Program {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
float grades;
int subj,i = 1;
System.out.printf(" Enter how many subjects: ");
subj = input.nextInt();
do {
System.out.printf("\nEnter Grade [%d]: ", i);
i++;
}while(i <= subj);
grades = input.nextInt();
}
}
输出
Enter how many subjects: 5
Enter Grade [1]: can't go back here
Enter Grade [2]: can't go back here
Enter Grade [3]: can't go back here
Enter Grade [4]: can't go back here
Enter Grade [5]: I'm automatically here right after I run the project
新人不是借口,所以我做了一个研究,但其中大多数都是一种方式。
我想在运行时显示可以同时保存和接受输入的多行,这就像将行转换为可以在运行时编辑或更改的字段一样。
编辑[1]:IDE是NetBeans 8.2
编辑[2]:我已经有一个工作程序(这是一种方式),它只是浮现在我的脑海中,我有点想升级它。
答:
问题不在于它跳过读取,而在于它在循环过程中没有读取。如果要在每次循环运行时从输入中读取,则需要将下一个输入放入循环中。最重要的是,如果您只有一个包含成绩的浮点数,则每当收到新成绩时,该变量都会被覆盖。这可以通过添加一个浮点数组来代替标准浮点数来解决。代码如下所示:
public class Program {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int subj,i = 0;
System.out.printf(" Enter how many subjects: ");
subj = input.nextInt();
float[] grades = new float[subj];
do {
System.out.printf("\nEnter Grade [%d]: ", i+1);
grades[i] = input.nextInt();
i++;
}while(i < subj);
}
}
(对此进行了一些其他编辑)
所以,这是它现在所做的,一行一行。该方法的前 2 行只是实例化要在方法中使用的变量。 设置为 0,以便更轻松地编辑数组。接下来的两个是获取您输入的受试者数量。相当标准。下一行,一个设置是为任意数量的主题创建一个新的浮点数组。然后,循环运行。在循环中,第一行是打印,与主题编号而不是数组的索引相对应。之后的行将输入的成绩放在数组中的索引处,之后的行递增。之后,循环检查是检查索引是否小于主题数。这是可行的,因为从 0 开始,当它为 5 时,它只是在列表中插入了第 4 个元素,这是最后一个元素。i
grades
i+1
i
i
i
i
注意:数组从 0 开始,所以这就是实例化为 0 的原因,以及更改其他检查实例的原因。他们正在补偿这种变化。i
i
do {
System.out.printf("\nEnter Grade [%d]: ", i);
i++;
}while(i <= subj);
您没有扫描循环内的任何输入。您只显示一个文本并递增 .
当你最终要求在循环外输入时,你已经打印了所有要求用户提供成绩的行,并且 的值已经超过了科目的数量。i
i
评论
input.nextInt()