我已经多次通过论坛,找到了几个答案,非常有帮助。我是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");
}
}
答案 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);
良好的编程就是管理范围。你无法在任何地方看到所有的变量非常有用 - 否则程序员一次只能考虑太多的变量。但是你需要确保你需要的变量在你需要的时候可见;通过在足够宽的范围内声明它,或者通过在方法调用的参数中传递它。