通过输入数组值来了解类

时间:2013-06-23 15:19:31

标签: java

我在java中的两个不同的类中有一个字符串数组。

当我从任何数组输入一个值时,我想得到该数组值所属的类。

那么如何通过输入数组值来了解该类?

例如:

import java.io.*;
class Car {

    public static void main(String args[]) throws Exception {
        System.out.println("The parts of a car are as follows");
        for (int i = 1; i <= 5; i++) {
            System.out.println(i + str[i]);
        }
        for (int j = 1; j <= 5; j++) {
            System.out.println(j + ch[j]);
        }
        DataInputStream dis = new DataInputStream(System.in);
        System.out.println("Choose and enter any part name to group it under following                       categories:" + "\n" + "Engine" + "\t" + "\t" + "Bonet");
        String part = dis.readLine();
        if (part == ch[]) {
            System.out.println("Your choosen part is " + part + " and it comes under Engine category");
        } else {
            System.out.println("Your choosen part is " + part + " and it comes under Bonet category");
        }
    }
}

class Engine {
    String ch[] = {"asd", "fgh"};
}

class Bonet {
    String str[] = {"qwe", "rty"};
}

现在当用户输入asd时我想显示它属于哪个类

2 个答案:

答案 0 :(得分:3)

我不会给你完整的代码,因为我相信自己创造它会对你更好。相反,这里有一些你需要考虑的事实:

  1. 要访问存储在其他类中的数组,您必须创建该类的实例

    Engine engine = new Engine();
    engine.ch[0];
    

    或者在您的情况下,您应该制作数组static

    class Engine {
        static String ch[] = { "asd", "fgh" };
    }
    

    并通过班级名称Engine.ch[0]

  2. 访问它
  3. 数组从0索引到arraySize-1

  4. 要获得数组的大小,您可以使用其归档的length,稍后再使用它

    for(int i=0; i<Bonet.str.length; i++){
        System.out.println(i+Bonet.str[i]);
    }
    
  5. 来自readLine()
  6. DataInputStream已被删除。相反,您可以使用nextLine

    中的java.util.Scanner
    Scanner scanner = new Scanner(System.in);
    //...
    String part = scanner.nextLine();
    
  7. 要检查某个对象是否存储在数组中,您必须遍历该数组的所有元素并将它们与您的对象进行比较。另请记住,要比较String对象,您应该使用equals之类的part.equals(otherString)方法。

    但是为了使用更少的代码,您可以将数组包装到List并使用其contains(Object o)方法。要将数组包装到列表中,您可以使用asList类中的java.util.Arrays方法。

    if(Arrays.asList(Engine.ch).contains(part)){...
    

答案 1 :(得分:2)

将此方法付诸实施的最小变化如下。要点:

  • Engine和bonet 的内容属于那些类的实例而不是汽车
  • 大小为5的数组具有标记0,1,2,3,4,而不是1,2,3,4,5
  • 如果循环中的数组不对数组大小进行硬编码,请改用.length

    import java.io.*;
    public class Car {
    
        public static void main(String args[]) throws Exception {
            System.out.println("The parts of a car are as follows");
    
            Engine engine=new Engine(); //we must create any components we have
            Bonet bonet=new Bonet(); //we must create any components we have
    
            for (int i = 0; i <bonet.str.length; i++) { 
                System.out.println(i +":"+ bonet.str[i]);
            }
            for (int j = 0; j < engine.ch.length; j++) {
                System.out.println(j +":"+ engine.ch[j]);
            }
            DataInputStream dis = new DataInputStream(System.in);
            System.out.println("Choose and enter any part name to group it under following                       categories:" + "\n" + "Engine" + "\t" + "\t" + "Bonet");
            String part = dis.readLine();
    
            boolean isInEngine=false; //assume isn't in engine, try to prove otherwise
    
            for(int i=0;i<engine.ch.length;i++){
                if (engine.ch[i].equals(part)){
                    isInEngine=true;
                }
            }
    
            if (isInEngine==true) {
                System.out.println("Your choosen part is " + part + " and it comes under Engine category");
            } else {
                System.out.println("Your choosen part is " + part + " and it comes under Bonet category");
            }
        }
    }
    
    class Engine {
        String ch[] = {"asd", "fgh"};
    }
    
    class Bonet {
        String str[] = {"qwe", "rty"};
    }
    

注意;这远非一个最佳解决方案,需要考虑的想法:

  • 参考像这样的另一类的内部是不好的做法,每个类(引擎和引擎盖)包含一个方法.testPart(String string)会更好,它会返回一个布尔值,如果它包含部分
  • 代码假设如果它不在引擎中,它必须是bonet,如果用户输入疯狂的内容怎么办
  • 数组列表(而不是数组)允许我们使用.contains(String string)而不是使用循环来查看数组
  • 不再支持DataInputStream(请注意,它在大多数IDE中都显示为点击),请考虑使用Scanner scanner = new Scanner(System.in);,然后使用scanner.nextLine();获取该行
  • 如果您添加第三种类型的组件,更好地将所有零件保存在阵列中,那么您可以轻松添加其他组件。接口(或抽象基类)将保证所有数组内容都包含.testPart(String string)getName()方法;数组/ arraylist将被声明为包含接口/ abstract-base-class
  • 您实际上从未创建过Car实例,您可以通过Car car=new Car();来创建Car实例,因此Car类可以使用car.printOptions();car.testComponent(String testString);等方法。你正在做的方式(一个长的主要功能)将适用于小程序,但你的程序越大,就越难以像这样工作。在这种情况下,发动机和机器人将是汽车类的领域(逻辑上比他们只是'闲逛'更有意义)