2014-02-19 65 views
-3

我已經經過了無數次的論壇,發現了幾個答案,非常有幫助。我是Java新手,所以要溫柔。基本問題是我有兩個類Main和一個方法容器。我需要從用戶的命令行輸入,要求用戶設置數組的大小。然後,用戶可以在陣列中的每個元素設置爲一個特定的值,它必須是有選項來設置這些值,即輸入2.然後再選擇包括獲得最小值,最大值,平均值等..傳遞裏面的參數if-else

我我一直在努力,直到我檢查用戶輸入時,代碼才工作,使用if-else或switch,因爲每個代碼塊都沒有看到創建的變量值。例如,設置數組大小參數不會傳遞到設置每個元素值的方法中。任何建議都會很棒。下面是代碼:以下

import java.util.Scanner; 

public class fc { 
    int command; 

public void commandline() { 

    Scanner scan = new Scanner(System.in); 
    int command; 
    System.out.print("Enter command>"); 
    command = scan.nextInt(); 
    while (command!=9) 
    { 
     if(command==1){ //set the array size 

      int arraySize=getArraySize(); 

     }else if (command==2){ //enter values for the array 

       int[]arrValues=setArrayValues(arraySize); 

      }else if (command==3){ 

       int [] theNumbers=arrayPrint(arrValues); 
       arrayPrint(arrValues); 

      }else if (command==4){ 
       sumArray(arrValues); 
       System.out.println("The sum of the array is "); 

      }else if (command==5){ 
       minArray(arrValues); 
      }else if (command==6){ 
       maxArray(arrValues); 
      }else if (command==7){ 
       avgArray(arrValues); 
      }else{ 
       printMenu(); 

     } 


     //Read in next command 
    System.out.print("Enter command>"); 
    command = scan.nextInt(); 
    } 
} 
public static int[] arrayPrint(int[] arrayValues) { 
    System.out.println("Elem Value"); 
for(int i=0;i<arrayValues.length;i++){ 
    System.out.printf("%s\t%d\n", i,arrayValues[i]); 
} 
return arrayValues; 
} 

public static int avgArray(int[] arrayValues) { 
    int[] theNumbers1=arrayValues; 
    int theSum=0; 
    int avg=0; 
    for (int theCounter=0; theCounter <theNumbers1.length; theCounter++) 
     theSum+=theNumbers1[theCounter]; 
     avg=theSum/theNumbers1.length; 
return avg; 
} 

public static int maxArray(int[] arrayValues) { 
    int max = arrayValues[0]; 
    for (int i = 0; i < arrayValues.length; i++) { 
     if (arrayValues[i] > max) { 
      max = arrayValues[i]; 
     } 
    } 
    return max; 
} 

public static int minArray(int[] arrayValues) { 
    int min = arrayValues[0]; 
     for (int i = 0; i < arrayValues.length; i++) { 
       if (arrayValues[i] < min) { 
        min = arrayValues[i]; 
       } 
     } 
     return min; 
} 

public static int sumArray(int[] arrayValues) { 

    int[] theNumbers1=arrayValues; 
    int theSum=0; 
    for (int theCounter=0; theCounter <theNumbers1.length; theCounter++) 
     theSum+=theNumbers1[theCounter]; 
    return theSum; 
} 

public static int getArraySize() { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter the size of the array?"); 
    int arraySize = input.nextInt(); 

    return arraySize; 
} 

public static int[] setArrayValues(int arraySize){ 

    Scanner scan = new Scanner(System.in); 
    int[] arr = new int[arraySize]; 
    System.out.println("Enter "+arraySize+ " numbers after each number press the enter key: "); 
    for(int i = 0; i < arr.length; i++){ 
     System.out.println("Set the value for index "+i); 
     arr[i] = scan.nextInt(); 
} 
return arr; 
} 


public void printMenu() { 
    // Print out commands to use 
    System.out.println("Type '1' to create an array of values"); 
    System.out.println("Type '2' to set a values in the array"); 
    System.out.println("Type '3' to print the array of values"); 
    System.out.println("Type '4' to sum an array of values"); 
    System.out.println("Type '5' to return the minimum number in the an array of values"); 
    System.out.println("Type '6' to return the maximum number in the an array of values"); 
    System.out.println("Type '7' to return the average of the array of values"); 
    } 

} 
+8

是否所有代碼都與您遇到的特定問題相關? –

回答

1

public class MyMain { 

public static void main(String[] args) { 

     fc program= new fc(); 
     program.commandline(); 

    } 

} 

方法容器您初始化變量if塊。

這意味着,簡單來說,該程序無法知道變量是否存在,因爲它不知道是否你的初始化代碼將永遠不會達到。

爲了讓他們訪問,在開始的時候初始化必要的變量,後來改寫自己的價值。

0

你的變量應該在的if-else塊之外啓動。

int arraySize; 
int[] arrValues; 
while (command!=9) 
{ 
    if(command==1){ //set the array size 

     arraySize=getArraySize(); 

    }else if (command==2){ //enter values for the array 

      arrValues=setArrayValues(arraySize); 
... 
0

您的問題是範圍

變量具有範圍,這意味着它被「包含」在某個塊中 - 它被聲明的塊。它只在該塊內部可見。

所以,從你的代碼:

if (command==2){ //enter values for the array 
     int[] arrValues=setArrayValues(arraySize); 
    } 

在這裏,你已經做了if塊內兩件事情:

  • 聲明一個名爲arrValues
  • 分配價值變量到arrValues,返回值setArrayValues()

但是,變量不能從該塊外面看到;在這個街區內你不會做任何事情。一旦程序離開該塊,arrValues被遺忘,並且分配給它的數組也被遺忘。

許多編譯器,包括Eclipse編輯器背後的編譯器,會給你一個關於這樣的警告:「局部變量‘arrValues’是從來不看」。

使用變量外塊,你必須聲明它的塊外:

int[] arrValues; 
if(...) { 
    arrValues = setArrayValues(); 
} 
doSomethingWith(arrValues); 

良好的編程是所有有關管理範圍。它是真的很有用你無法在任何地方看到所有變量 - 否則程序員一次只能考慮太多的變量。但是您確實需要確保您需要的變量在需要時可見;可以通過在足夠寬的範圍內聲明它,或者通過在方法調用的參數中傳遞它。

+0

謝謝你的迴應,它指出了我朝着正確的方向。我定義並初始化了main方法中的參數,稱爲傳遞初始參數的命令行方法,然後if從其中接管。 – user3328487