2013-05-18 181 views
-2

我有一個關於如何使用我的方法已經使用的變量到另一個方法,以及如何設置一個極限的問題了用戶可以輸入,例如,用於我的Java功課之一分配我需要編寫一個需要3到6個名字的程序,然後我需要創建一個名爲geneateNewName()的新靜態方法,它必須使用3到6個名稱來顯示名稱以及每個名稱的'第二封信,併產生一個新的名字,我該怎麼做,謝謝。另外,這裏是我到目前爲止的代碼:Java類和靜態方法

public class Testing{ 
    public static void main(String args[]){ 
     Console c = System.console(); 
     String str1; 
     String str2; 
     String str3; 
     String str4; 
     String str5; 
     String str6; 
     str1 = c.readLine("Please enter a family member's name: "); 
     str2 = c.readLine("Please enter a family member's name: "); 
     str3 = c.readLine("Please enter a family member's name: "); 
     str4 = c.readLine("Please enter a family member's name: "); 
     str5 = c.readLine("Please enter a family member's name: "); 
     str6 = c.readLine("Please enter a family member's name: "); 
    } 

    public static void generateNewName(){ 
     System.out.println((str1.charAt(1))); 
     System.out.print(str22.charAt(1)); 
     System.out.print(str33.charAt(1)); 
     System.out.print(str44.charAt(1)); 
     System.out.print(str55.charAt(1)); 
     System.out.print(str66.charAt(1)); 
    } 
} 

當我在命令行中運行這個程序,它只要求六個名字,它不會顯示在編碼新生成的名字generateNewName()靜態方法。

+1

IMO,這甚至不會編譯...所以你不能運行它。你錯過了一些代碼嗎? – home

回答

0

像其他人所說的,你永遠不會調用generateNewName()所以它不運行。但是這裏有更大的問題。

您應該使用Scanner讀取用戶輸入。您還在main()中聲明瞭您的字符串變量,這會限制其範圍,因此generateNewName()無法看到它們。有幾種方法可以讓您的字符串可用於generateNewName(),包括單獨傳遞所有字符串或將它們全部存儲在數組中並將它們傳入。但是出於您的目的,您可以將所有字符串聲明爲靜態類變量。

class Testing 
{ 
    public static String str1; 
    public static String str2; 
    public static String str3; 
    public static String str4; 
    public static String str5; 
    public static String str6; 

    public static void main(String args[]) 
    { 
     Scanner scanner = new Scanner(System.in); 

     System.out.println("Please enter a family member's name: "); 
     str1 = scanner.next(); 
     System.out.println("Please enter a family member's name: "); 
     str2 = scanner.next(); 
     System.out.println("Please enter a family member's name: "); 
     str3 = scanner.next(); 
     System.out.println("Please enter a family member's name: "); 
     str4 = scanner.next(); 
     System.out.println("Please enter a family member's name: "); 
     str5 = scanner.next(); 
     System.out.println("Please enter a family member's name: "); 
     str6 = scanner.next(); 

     generateNewName(); 
    } 

    public static void generateNewName() 
    { 
     System.out.print(str1.charAt(1)); 
     System.out.print(str2.charAt(1)); 
     System.out.print(str3.charAt(1)); 
     System.out.print(str4.charAt(1)); 
     System.out.print(str5.charAt(1)); 
     System.out.print(str6.charAt(1)); 
    } 
} 

由於我假設你仍然是初學者,上面的代碼將適合你。但是我想告訴你如何使用你可能已經學過的技術或希望很快學到的技術來減少你使用的代碼行數。通過使用for循環和字符串數組,您不必在每次要提示和收集用戶數據時寫出所有這些行。從那裏你可以傳遞名稱到generateNewName()並使用另一個for循環打印出你的新名字。現在你不需要單獨聲明你的字符串,你可以通過改變數組的大小來控制用戶提示輸入多少次。

class Testing 
{ 
    public static void main(String args[]) 
    { 
     Scanner scanner = new Scanner(System.in); 
     int arraySize = 0; 
     while(arraySize > 6 || arraySize < 3) 
     { 
      //Get user input here. 
     } 
     String[] names = new String[arraySize]; 
     for(int i = 0; i < names.length; i++) 
     { 
      System.out.println("Please enter a family member's name: "); 
      names[i] = scanner.next(); 
     } 

     generateNewName(names); 
    } 

    public static void generateNewName(String[] names) 
    { 
     for(int i = 0; i < names.length; i++) 
     { 
      System.out.print(names[i].charAt(1)); 
     } 
    } 
} 

要打印出生成的名稱在一行確保您使用System.out.print(),而不是System.out.println()

+0

你給我正常工作的建議,我也想的唯一的事情就是能夠設置限制多少家庭成員的名字,用戶可以輸入,也就是3到6,我也希望能夠顯示新生成的名稱作爲單個參數,就像用戶輸入名稱bob,fred和jimmy一樣,計算機會將新生成的名稱顯示爲ori,而不是在新行上顯示每個字符,我該怎麼做?謝謝。 –

+0

'generateNewName()'方法將在一行中顯示新名稱。至於限制用戶輸入,你可以創建一個名爲'arraySize'的整數,並要求用戶輸入一個介於3和6之間的數字。你可以把這個邏輯放在一個'while'循環中,這將繼續提示用戶輸入一個數字if用戶輸入一個不在3和6之間的數字。一旦你有了你的號碼,你可以使用'arraySize'作爲大小來創建數組。使用'.nextInt()'而不是'.next()'讀入用戶輸入的整數。 –

+0

另一種方法是創建一個名爲'getArraySize()'的新方法,該方法將返回一個整數並在那裏請求用戶輸入。在返回整數之前,您將檢查數字是否在3到6之間。如果不是,則遞歸調用'getArraySize()'。你可以這樣調用方法:'String [] names = new String [getArraySize()];' –

2

你永遠不會調用generateNewName()。你應該把它放在主要的地方。如果你想讓它運行。

1

你應該這樣最後一次讀取行之後調用generateNewName方法:

str6 = c.readLine("Please enter a family member's name: "); 
    generateNewName(); 
}