【问题标题】:How to use java.util.Scanner class to read input?如何使用 java.util.Scanner 类读取输入?
【发布时间】:2019-10-24 18:47:44
【问题描述】:

我有一个关于使用 java.util.Scanner 类读取输入的问题。

下面是我的编码,没有使用 java.util.Scanner 类来读取输入:

         public class NewTry {
          public static float[][] clone(float[][] a) throws Exception {
          float b[][] = new float[a.length][a[0].length];

           for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[0].length; j++) {
                b[i][j] = a[i][j];
              }
           }
           return b;
         }

         public static void main(String args[]) {


          float[][] a = new float[][] { { 1.513f, 2.321f, 3.421f }, { 4.213f, 5.432f, 6.123f },
        { 7.214f, 8.213f, 9.213f } };



          try {
    float b[][] = clone(a);
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[0].length; j++) {
            System.out.print(b[i][j] + " ");
        }
         System.out.println();
          }
      } catch (Exception e) {
          System.out.println("Error!!!");
    }
        }
    }

不使用 java.util.Scanner 显示输出:

      run:
     1.513 2.321 3.421 
     4.213 5.432 6.123 
     7.214 8.213 9.213 
     BUILD SUCCESSFUL (total time: 3 seconds)

我的问题是如何在编码中添加 java.util.Scanner 类来读取没有默认浮点数的输入?是否使用数组运行扫描仪?

其实我想要的样例输出如下(浮点数必须自己输入):

       run:
       Type nine float numbers two-dimensional array of similar type and size with line breaks, end 
       by"-1":
       1.513
       2.321
       3.421 
       4.213
       5.432 
       6.123 
       7.214
       8.213 
       9.213 
       -1


       The result is:

       1.513 2.321 3.421 
       4.213 5.432 6.123 
       7.214 8.213 9.213 
       BUILD SUCCESSFUL (total time: 11 second) 

希望有人可以指导我或修改我的编码以添加 java.util.Scanner 类来读取输入。谢谢。

【问题讨论】:

标签: java arrays


【解决方案1】:

看看这个

 public static void main(String args[]) {

            Scanner sc = new Scanner (System.in);
            System.out.println ("Type nine float numbers two-dimensional array of similar type and size with line breaks, end by -1:");
            float[][] a = new float[3][3];
            for (int i=0; i<3; i++){
                for (int j=0; j<3; j++){
                    String line = sc.nextLine();
                    if ("-1".equals(line)){
                        break;
                    }
                    a[i][j]=Float.parseFloat(line);
                }
            }

            System.out.println("\n The result is:");

            try {
                float b[][] = clone(a);
                for (int i = 0; i < a.length; i++) {
                    for (int j = 0; j < a[0].length; j++) {
                        System.out.print(b[i][j] + " ");
                    }
                    System.out.println();
                }
            } catch (Exception e) {
                System.out.println("Error!!!");
            }
        }

您应该定义一个新的 Scanner (sc),然后循环 3 x 3 次,直到您读取所有输入。 如果用户输入 -1,则循环结束。请注意,输入 9 个数字时无需退出。

此外,每个用户输入都被读取为一行而不是一个标记,然后被解析为一个浮点数。如果用户输入的字符串不是浮点数,则会引发异常。

示例:

Type nine float numbers two-dimensional array of similar type and size with line breaks, end by -1:
1.1
1.2
1.3
2.1
2.2
2.3
3.1
3.2
3.3

The result is:
1.1 1.2 1.3 
2.1 2.2 2.3 
3.1 3.2 3.3 

【讨论】:

  • @loannis Barakos 如何在数组中停止限制?
  • 如果你想无限地插入数字直到输入 -1,最简单的方法是设置你的二维数组长度与最大数字,例如[1000][3]。然后 for 循环的 i 应该增加到 1000(或 .length)。当输入 -1 时,您可以将 i 存储到 var 中,这样您就知道数组已填满 i。另一种解决方案是创建一个 2d Arraylist。示例java2blog.com/2d-arraylist-java-example
【解决方案2】:
Scanner scan =new Scanner(System.in);
float[][] a = new float[3][3];

for(int i =0 ;i<3;i++) {
   for(int j=0; j<3; i++) {
      a[i][j] =scan.Float();
   }
}

【讨论】:

  • 你能在我的编码中添加你的答案吗?谢谢。
  • 感谢您的回答 - 尽管代码/配置 sn-ps 可能会提供一些有限的短期帮助,但通过说明为什么这是一个很好的解决方案来正确解释 would greatly improve 其长期价值这个问题,并将使其对未来有其他类似问题的读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。
猜你喜欢
  • 2015-01-30
  • 2016-08-17
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2014-01-17
相关资源
最近更新 更多