在运行时使用一台扫描仪显示多行可以同时容纳和接受输入的行

时间:2018-09-09 15:27:56

标签: java java.util.scanner

我正在使用循环

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] :我已经有一个这样的工作程序(这是一种方法),它刚浮现在我的脑海,我有点想对其进行升级。

1 个答案:

答案 0 :(得分:0)

问题不在于它跳过读取,而是在循环期间不读取。如果要在每次循环运行时从输入中读取内容,则需要将下一个放入循环中。最重要的是,如果只有一个包含成绩的浮点数,则在收到新成绩时将覆盖该变量。可以通过添加一个浮点数组代替标准浮点来解决此问题。代码看起来像这样:

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);
    } 
}

(对此进行了其他一些编辑)

所以,这就是现在一行一行地执行的操作。该方法的前两行只是实例化要在该方法中使用的变量。 i设置为0,以便更轻松地编辑数组。接下来的两个正在获取您输入的主题数。很标准。下一行是一个设置grades,它为许多主题创建了一个新的浮点数组。然后,循环运行。在循环中,第一行正在打印,其中i+1与主题编号而不是数组的索引相对应。此后的行会将输入的分数放在数组中的索引i处,其后的行递增i。之后,循环检查将检查i的索引是否小于主题数。之所以有效,是因为i从0开始,当它为5时,它只是在列表中插入了第四个元素,即最后一个元素。

注意:数组从0开始,这就是为什么i实例化为0的原因,以及为什么更改其他检查i实例的原因。他们正在对此变化进行补偿。