Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从用户输入读取泛型类型_Java_Arrays_Generics - Fatal编程技术网

Java 从用户输入读取泛型类型

Java 从用户输入读取泛型类型,java,arrays,generics,Java,Arrays,Generics,我做了一些研究,但什么也没发现,所以我需要帮助从用户输入中读取泛型类型。例如,我想输入一个整数,当我再次运行程序时,我想输入一个字符串。我该如何使用扫描仪或其他输入读取器?这是我的密码 public class array <T,E> { private T [] a; private int size; private int location; private E add; private E delete; private E find; public array(){ }

我做了一些研究,但什么也没发现,所以我需要帮助从用户输入中读取泛型类型。例如,我想输入一个整数,当我再次运行程序时,我想输入一个字符串。我该如何使用扫描仪或其他输入读取器?这是我的密码

public class array <T,E> {
private T [] a;
private int size;
private int location;
private E add;
private E delete;
private E find;

public array(){

}
public array(int size){
    this.size = size;
    this.location = 0;
    this.a = (T[])(new Object[size]);
}
public boolean add(T element){
    if(location == size){
        return false;
    }else{
        this.a[location++] = element;
        System.out.println("Element added at location " + location);
        return true;
    }
}
public int find(T element){
    for(int i = 0 ; i < location; i ++){
        if(a[i] == element){
            System.out.println("Element found at location " + i);
            return i;
        }
    }
    System.out.println("Couldn't find element");
    return -1;
}
public boolean delete(T element){
    int loc = find(element);
    if(loc == -1){
        System.out.println("Couldn't find element");
        return false;
    }else{
    for(int x = loc; x < location - 1; x++){
        a[x] = a[x+1];
    }
        System.out.println("Element deleted");
        location -= 1;
    return true;
    }
}
public void go(){
        DataInputStream in = new DataInputStream(System.in);
        Scanner scanner = new Scanner(System.in);
        array a = null;
        int choice = 0;
        System.out.println("Chose what you want to do");
        System.out.println("1: Add a value");
        System.out.println("2: Delete a value");
        System.out.println("3: Find a value and return the index");
        System.out.println("4: Display all elements in array");
        System.out.println("5: Exit");
        System.out.println();
        try{
        choice = scanner.nextInt();
        }catch(Exception e){
            System.out.println("Incorrect input");
            go();
        }
        switch(choice){
            case 1:
                System.out.println("Enter the element you want to add");
                add = in.read();
                a.add(add);
                break;
            case 2: 
                System.out.println("Enter the element you want to delete");
                delete = in.nextInt();
                a.delete(delete);
                break;
            case 3:
                System.out.println("Enter the element you want to find");
                find = in.nextInt();
                a.find(find);
                break;
            case 4:
                System.out.println(a.toString());
                break;
            case 5: 
                System.exit(0);
                break;
        }
        System.out.println("Continue? 1-Yes, 2-No");
        int yn = in.nextInt();
        if(yn == 1){
            go();
        }else{
            System.exit(0);
        }
}
@Override
public String toString(){   
    String string = "";
    for(int i = 0; i < location; i++){
        string = string + " " + a[i];
    }
    return "Numbers " + string;
}
}
公共类数组{
私人T[]a;
私有整数大小;
私密地点;
私人E-add;
私人E删除;
私人E-find;
公共数组(){
}
公共数组(整数大小){
这个。大小=大小;
这个位置=0;
this.a=(T[])(新对象[size]);
}
公共布尔加法(T元素){
如果(位置==大小){
返回false;
}否则{
这个.a[location++]=元素;
System.out.println(“在位置添加的元素”+位置);
返回true;
}
}
公共整数查找(T元素){
对于(int i=0;i
这是我的主要课程(司机)

公共类数组操作器{
私有静态整数大小;
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
数组a=新数组();
System.out.println(“输入数组的大小”);
大小=in.nextInt();
System.out.println(“-------------------------------”;
a=新阵列(大小);
a、 go();
}
}

因此,我的问题是要求用户在go()方法中为数组中的元素输入值。我不知道使用哪个输入读取器来读取泛型类型,或者如果可能的话。谢谢

在创建类数组的对象之前,最好先确定输入的类型。也许你们可以从用户那个里得到它。确定类型后,使用例如:
array arr=new array
创建对象。或者,对于泛型类型,请使用
对象

我可以看到您有
新的扫描仪(System.in)
,它指示您引用的是文本用户输入。这里的问题是,您的程序如何知道应该将文本输入转换为哪种类型

没有“读取泛型类型”这样的东西,您必须将输入转换为适当的类型(整数、字符串、自定义类等)


这里的一种方法是向用户询问其他信息,以便区分他/她提供的输入类型。

正如一些人所说,您可以使用
Object
作为泛型变量类型,特别是在使用泛型方法或不知道用户将使用什么数据类型时,如下面这个简单的方法:

import java.util.Scanner;

public class GenericMethod {
    public static void main(String[] args) {
        System.out.println("Type something that's yours: ");

        Scanner sc = new Scanner(System.in);

        Object thing;
        thing = sc.next();
        isMine(thing);
    }

    // Generic Method
    public static <T> void isMine(T x) {
        System.out.println(x + " is mine.");
    }
}
import java.util.Scanner;
公共类泛型方法{
公共静态void main(字符串[]args){
System.out.println(“键入属于您的内容:”);
扫描仪sc=新的扫描仪(System.in);
客观事物;
thing=sc.next();
伊斯明(事物);
}
//通用方法
公共静态空隙率(T x){
System.out.println(x+“是我的”);
}
}
import java.util.Scanner;

public class GenericMethod {
    public static void main(String[] args) {
        System.out.println("Type something that's yours: ");

        Scanner sc = new Scanner(System.in);

        Object thing;
        thing = sc.next();
        isMine(thing);
    }

    // Generic Method
    public static <T> void isMine(T x) {
        System.out.println(x + " is mine.");
    }
}