【问题标题】:Taking Space Separated Row Inputs in a Two dimensional Array在二维数组中采用空格分隔的行输入
【发布时间】:2016-12-09 00:42:46
【问题描述】:

我对编程比较陌生,我正在处理一个需要我读取空格分隔的整数并将它们输入到二维数组中的问题,但我似乎不明白为什么我不能这样做。任何关于可能方法的提示都会有所帮助

例如。输入将如下所示

2 //用于尺寸

2 3 //ROW1

4 5 // 第 2 行

import java.io.*;
import java.util.*;
import java.lang.*;
public class HelloWorld{

 public static void main(String []args){
    Scanner sc= new Scanner(System.in);
    System.out.println("Hello World");
    System.out.println("Enter Dimension of Matrix");
    int N= sc.nextInt();
    int[][] m=new int [N][N];
    for (int i=0;i<N;i++)
    {   System.out.println("Enter Elements of row "+ i);
       for(int j=0;j<N;j++ )
       {
        m[i]=sc.nextInt();
       }
    }
    System.out.println(m);
 }
}

我测试了上面的代码,在控制台得到如下结果

HelloWorld.java:16:错误:不兼容的类型:int 无法转换为 int[]
m[i]=sc.nextInt();

^

首先,我想知道我的想法(方法)对吗?

其次,正确执行此操作的可能方法是什么?

【问题讨论】:

    标签: java arrays multidimensional-array java.util.scanner


    【解决方案1】:

    给你:

    import java.io.*;
    import java.util.*;
    import java.lang.*;
    
    public class HelloWorld {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter Dimension of Matrix");
    
            int N = sc.nextInt();
            int[][] m = new int[N][N];
            for (int i = 0; i < N; i++) {
                System.out.println("Enter Elements of row " + i);
                for (int j = 0; j < N; j++) {
                    m[i][j] = Integer.valueOf(sc.next());//replaced line with proper code
                }
            }
            sc.close();
            System.out.println(Arrays.deepToString(m));//use this api to print arrays
        }
    }
    

    【讨论】:

    • 这很好用,我将阅读介绍给我的两个新东西,即 Integer.valueof() 和 Arrays.deepToString,谢谢
    • @Hardik 如果你有答案,请接受!!
    【解决方案2】:

    m 是一个多维数组,这意味着您必须指定 m[i][?]。像这样

    m[i][j]=sc.nextInt();
    

    你的逻辑有点不对劲,你想在第 i 行和其他列 j 处要求用户输入。试试这个,愉快的编码:)

    for (int i=0;i<N;i++){                  
        for(int j=0;j<N;j++){
            System.out.println("Enter Elements of row "+ i);
            m[i][j]=sc.nextInt();
        }
    }
    
    for (int i=0;i<N;i++){     
        for(int j=0;j<N;j++){
            System.out.print(m[i][j]);
        }
        System.out.println();
    }
    

    【讨论】:

    • 这将按行输入对吗?我可以在输入中的换行符之后执行类似操作,程序输入数组的新行吗? @亚伦?
    • 它将在填充每一行时取值,在行开始 i 处,然后是剩余的列 j。请您再解释一下好吗?
    • 我的意思是当我在控制台上为行提供输入(如 2 3 等)时,当我在 2 3 之后为下一行提供值时,编译器遇到“/n”一个新的行字符,所以我认为数组输入也可以被它操纵,尽管我真的怀疑这种方法
    • 这听起来很复杂,我可能需要一段时间才能弄清楚,因为我以前从未做过类似的事情,可能是在每次开始时询问用户行他们是否希望添加另一行,如果是,则将新行附加到已经存在的数组中。正如我所说,我不确定这一点。
    • 我现在确信这是一种冗长且不必要的方法,最好按照@Imran 在下面的回答中提到的方式使用它
    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 2021-06-05
    • 1970-01-01
    • 2017-01-12
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多