类型不匹配,从字符串扫描到对象

时间:2016-03-06 07:57:43

标签: java java.util.scanner

我正在尝试从扫描仪读取类对象,但我正在

type mismatch: cannot convert from String to otherClass

private class myClass() {
    scan = new Scanner(System.in);
    int x;
    otherClass A;
    otherClass B;
    A = scan.next();
}

在这种情况下,otherClass有许多变量,但是我只需要将名称扫描为字符串,这样我就可以将它与类中其他对象的ArrayList进行比较。

不确定我哪里出错,任何帮助都会非常感激。

4 个答案:

答案 0 :(得分:0)

扫描仪对象始终读取字符串。您必须获取scan.next()返回的String对象,然后根据需要将其传递给otherClass对象。 A和B都是otherClass类型(除非otherClass是String的超类),你不能将String对象赋给otherClass类型的引用。

此外,Java约定是大写类名,而不是camelCase它们,所以你应该使用OtherClass。

答案 1 :(得分:0)

       // here scan.next() reads the string but cannot be
      // convert to the type otherClass.
     A = scan.next(); //raise ClassCastException

String只能转换为Object类,因为Object是您在parent中创建的所有Class的{​​{1}}类。

您甚至无法扩展java类,因为它被声明为String因此,对于任何final来说,此Class String永远不会是parent

因此,otherclass对象引用只能由StringString类加入。

您可以像这样更改代码。

Object

答案 2 :(得分:0)

尝试这样的事情 假设Otherclass有这样的Arraylist。         ArrayList arraylist = new ArrayList();         arraylist.add(scanner.nextInt());

比较arraylist中的字符串和对象         String s1 = scanner.next();         String s2 = otherclass.arraylist.get(0).toString();
        的System.out.println(s1.equalsIgnoreCase(S2));

但是你必须覆盖数组列表中的类中的toString()方法。

答案 3 :(得分:0)

你想以这种方式做事很奇怪。

在面向对象语言中,我们使用构造函数初始化实例中的变量。

如果你坚持使用扫描仪在你的OtherClass中输入名字,你最好这样做。

import java.util.Scanner;

class OtherClass {

    public String name;

    public OtherClass(String name){

        this.name = name;

    }

}

public class MyClass {

    int x;
    OtherClass a;
    OtherClass b;

    public MyClass(){

        Scanner scanner = new Scanner(System.in);


        this.a = new OtherClass(scanner.next());
        this.b = new OtherClass(scanner.next());
        // always close resources after use
        scanner.close();
    }

    //  testing
    public static void main(String args []){

        MyClass myClass = new MyClass();

        System.out.println("the name in OtherClass a is: "+myClass.a.name);
        System.out.println("the name in OtherClass b is: "+myClass.b.name);

    }

}