什么是" int"在这一行?

时间:2016-10-01 05:33:03

标签: java arrays types

我试图在for循环中编写一个数组,似乎对错误没有任何意义。

String[][] userName;

userName = new String[3][4];

for(int x=1; x<= 4; x++) {
    for(int y=-1; y <= 3; y++) {
        System.out.println("Enter student name for row "+x+"column "+y+" ==>");
        userName[x-1][y-1] = (String) System.in.read();
    }
}

对于这一行:

userName[x-1][y-1] = (String) System.in.read()

它出错了:

Incompatible types: int cannot be converted to String

但该行中的内容被归类为int?我所知道的只有[x-1][y-1],但他们会在数组中找到数字,我甚至会删除它们,但它仍然会说同样的错误。

什么被归类为int,如何解决此错误?

3 个答案:

答案 0 :(得分:2)

因为ddd将读取字节将返回0-255范围内的值,因此您不需要它,您想要读取String然后使用System.in.read()Scanner < / p>

Streams

Scanner(import java.util.Scanner)

Scanner scan =new Scanner(System.in);

for(int x=1; x<= 4; x++) {
    for(int y=-1; y <= 3; y++) {
        System.out.println("Enter student name for row "+x+"column "+y+" ==>");
        userName[x-1][y-1] = scan.read();
    }
}

Streams

Scanner scan =new Scanner(System.in);

scan.read(); // read the next word
scan.readLine(); // read the whole line

扫描仪很简单,附带了很多功能link to doc,Streams可用于读取有时无法通过扫描仪读取的批量数据

答案 1 :(得分:1)

1 for(int x=1; x<= 4; x++)
2 {
3  for(int y=-1; y <= 3; y++)
4  {
5   System.out.println("Enter student name for row "+x+"column "+y+" ==>");
6   userName[x-1][y-1] = (String) System.in.read();
7  }
8 }

让我们一点一点地分割这个循环。 在第6行,您通过System.in.read()行获取Integer输入,但您的数组基本上是String数据类型!所以,你把它转换为String。但是,如果没有 Integer.toString(System.in.read()),则无法将int插入到字符串中。这是正常的方式!但是,最简单的方法是

userName[x-1][y-1] = "" + System.in.read();

Java从右到左读取一行。所以它需要一个输入并将它附加到一个空的String然后将它放在userName数组中!。

(感谢Pavneet Singh注意到我) (感谢Erwin Bolwidt纠正了我。我没注意到它是字符串!)

或者,您可以使用Scanner class

为此,您需要添加以下代码。 在课程行(公共课程)

之前添加以下内容
import java.util.Scanner;

然后当你的课程在 public static void main(..)里面开始,在第一行或在函数之前的任何方便的行中,你将写下以下行

Scanner sc = new Scanner(System.in);

初始化扫描仪。然后你可以使用扫描仪类!

userName[x-1][y-1] = sc.next();

透过扫描仪类,您需要指定您将提供的数据类型!因此,如果您/ user提供String或float或boolean值,它将抛出错误并且程序将结束/崩溃!非常有效,如果您试图避免错误的数据类型。

最后,您可能在第3行的循环声明中出错。 您可以从 y = -1 运行循环,但在Java中,数组索引从0开始。因此, y上没有索引 - 1 = - 1 - 1 = -2 < / strong>,会抛出错误!要避免这一点,您只需要从y = 1声明循环。

for(int y = 1, y <= 3; y++)

快乐的节目!干杯!

答案 2 :(得分:0)

在使用System.in.read()之前,你应该对它进行一些研究。 System.in.read()方法从输入流中读取数据字节并将数据作为整数返回。因此,您只能使用整数或字符变量来存储数据。字符串变量无法存储方法System.in.read()返回的数据。这就是你得到异常的原因

  

不兼容的类型:int无法转换为String

使用System.in.read()方法时也使用try catch块。