在if-else中传递参数

时间:2014-02-19 14:36:42

标签: java user-input

我已经多次通过论坛,找到了几个答案,非常有帮助。我是Java的新手,所以要温柔。基本问题是我有两个类Main和一个方法容器。我需要从用户那里获取命令行输入,该命令行将要求用户设置数组的大小。然后,用户可以将数组中的每个元素设置为特定值,必须有选项来设置这些值,即输入2.然后进一步的选项包括获取最小值,最大值,平均值等...

我正在努力的是代码工作,直到我检查用户输入,使用if-else或switch,因为每个代码块都没有看到创建的变量值。例如,设置数组大小参数不会传递到设置每个元素的值的方法中。任何建议都会很棒。这是代码:

public class MyMain {

public static void main(String[] args) {

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

    }

}

下面的方法容器
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");
    }

}

3 个答案:

答案 0 :(得分:1)

初始化里面的 if块。

这意味着,简单来说,程序无法知道该变量是否存在,因为它不知道您的初始化代码是否会被访问。

要使它们可访问,请在开头初始化必要的变量,然后再覆盖它们的值。

答案 1 :(得分:0)

您的变量应该在if-else-block之外启动。

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);
...

答案 2 :(得分: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);

良好的编程就是管理范围。你无法在任何地方看到所有的变量非常有用 - 否则程序员一次只能考虑太多的变量。但是你需要确保你需要的变量在你需要的时候可见;通过在足够宽的范围内声明它,或者通过在方法调用的参数中传递它。