2013-06-23 58 views
0

我在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我想要顯示它屬於哪一類來得到這個工作有如下

+6

你可以換一種說法的東西有意義? –

+4

我不知道如何理解你的問題。你可以添加一些輸入和預期輸出的例子嗎? – Pshemo

+5

人們還沒有投票關閉這個問題呢。 OP對於SO來說是新的,給他一個機會,用票等待從上次更新/編輯中說出10分鐘。 – Pshemo

回答

2

最低配置的變化。要點:

  • 引擎的內容和博內特屬於這些類的情況下,不車上的大尺寸5
  • 陣列具有indicies 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"}; 
    } 
    

注意;這絕不是一個最佳的解決方案,思路考慮:

  • 這是不好的做法,指這樣annother類的內部,這將是爲每個類(發動機罩)更好地包括方法, .testPart(String string),將返回一個布爾值,以是否含有部分
  • 代碼假設,如果它不是在發動機就必須在博內特,如果用戶輸入什麼東西瘋狂
  • 一個數組列表(而不是數組)將允許我們使用.contains(String string)而不是使用循環來查看數組
  • DataInputStream不再支持(請注意,它在大多數IDE中都會出現罷工),請考慮使用Scanner scanner = new Scanner(System.in);,然後使用scanner.nextLine();獲取行
  • 如果添加第三種組件,最好是將所有零件放入一個數組,那麼你可以輕鬆地添加其他。一個接口(或抽象基類)將承諾所有的數組內容都保存着.testPart(String string)getName()方法; array/arraylist將被聲明爲包含接口/ abstract-base-class
  • 您從未真正創建Car的實例,您將通過Car car=new Car();執行此操作,然後Car類可能會有方法,如car.printOptions();car.testComponent(String testString);。你這樣做的方式(一個長主要功能)對於小程序來說可以很好地工作,但是越大的程序就越難以像這樣工作。在這種情況下,引擎和bonet將是汽車類的領域(從邏輯上講,這比他們只是'掛着'更有意義)
+0

非常感謝。它正在工作。我很欣賞你如何讓我這樣的初學者理解事物。 – user2513831

+1

@ user2513831真棒,請注意,雖然我發佈的代碼是**不好**,只是最低限度的開始。我強烈建議你仔細看看我的註釋部分 –

+0

我會記住你最後所做的註釋。這將是有用的。謝謝。 – user2513831

3

我不會給你完整的代碼,因爲我相信自己創建它對你更好。相反,這裏有你需要考慮幾個事實:

  1. 要訪問存儲在其他類數組,你會乙醚有類

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

    ,或者在你的情況下創建實例你應該讓你的陣列static

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

    ,並通過類名稱訪問它Engine.ch[0]

  2. 陣列從0索引到arraySize-1

  3. 要得到數組的大小,你可以使用它的申請length並在以後使用它像

    for(int i=0; i<Bonet.str.length; i++){ 
        System.out.println(i+Bonet.str[i]); 
    } 
    
  4. readLine()DataInputStream被depracated。相反,你可以使用nextLinejava.util.Scanner

    Scanner scanner = new Scanner(System.in); 
    //... 
    String part = scanner.nextLine(); 
    
  5. 檢查是否一些對象存儲在陣列,你將不得不遍歷數組中的所有元素,並將它們與對象進行比較。另外請記住,要比較字符串對象,您應該使用equals方法,如part.equals(otherString)

    但爲了使用較少的代碼,您可以將您的數組包裝到List並使用其contains(Object o)方法。要將數組包裝到列表中,可以使用java.util.Arrays類中的asList方法。

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

謝謝我將繼續深入您的觀點。這是一個有用的信息,它會幫助我糾正錯誤並理解我的錯誤。再次感謝。 – user2513831

+0

歡迎您:) – Pshemo

+0

@ user2513831:這是兩個更好的答案。 1+ –

相關問題