Else 语句不打印,想知道我是否在 java 中错误地从 setter 方法调用

Else statement not printing, wondering if I am calling from setter method incorrectly in java

提问人:Aleo111 提问时间:4/9/2022 最后编辑:Aleo111 更新时间:4/9/2022 访问量:78

问:

我正在尝试用 java 制作一个程序来创建一个数组。我正在尝试采用OOP方法。我制作了一个类文件,其中包含一个 setter 方法和我的数组:

public class MenuTestClass{

private int myMonths[];
private double average; //store average value of numbers
private boolean averageCanBeCalculated;
private int max; // store max number from array. to be calculated


public MenuTestClass(){
    myMonths = new int[5];
    }
public MenuTestClass(int[] myMonths){
   this.myMonths = myMonths;
   }
public void setMyMonths(int[] values){ //declare setter method
   myMonths = values;
   }

数组的元素取自我的 main 方法中的用户:

       //Menu loop
        int myMonths[] = new int[5];
        int index = 0;
        int num;
        while(choice !=6){


        switch (choice){
            case 1:

            int n = 1;    //int n = number of projects
            Scanner sc = new Scanner(System.in);
            System.out.println("How many months was your project?");

              for(int i=0; i<1; i++){
               int a = sc.nextInt();

                //if months is lesser than 2/greater than 12
               if((a < 2) || (a > 12)){
                System.out.println("Please enter an amount between 2 and 12 months");}

               //if months is between 2 and 12 add it to the array
               else{myMonths[index++] = a;}
               }

             calc.setMyMonths(myMonths); //creating the object
             break;

我正在尝试创建一个显示数组所有元素的函数。如果数组为空,我希望它显示一条消息,说明这一点。但是,我的 else 语句不会运行。我试图弄清楚为什么会这样,我是否错误地调用了数组?请看下面的代码:

           case 2:
            if(myMonths.length > 0){
                 // print the values
                for(int i=0; i < myMonths.length; i++){
                    System.out.println(myMonths[i] + " ");
                 }

            } else {

                  System.out.println("No values entered");
             }

任何帮助都会很棒!提前致谢

Java 数组 oop if-statement java.util.scanner

评论

1赞 nicomp 4/9/2022
null 表示未实例化。您在声明中实例化了它,因此它永远不会为 null。
0赞 Pshemo 4/9/2022
测试为时已晚。IF 将成立,那么你最终会得到,但由于没有字段(也没有任何其他字段或方法),它会抛出 NullPointerException。基于“”,您可能会与空数组混淆。这是不一样的,就像没有盒子或有空盒子一样。if(myMonths != null)for(int i=0; i < myMonths.length; i++){ if(myMonths != null){ myMonthsnulli < myMonths.lengthi < null.lengthnulllength//if the array is not empty display all itemsnull
0赞 Aleo111 4/9/2022
是的,我以为 null 意味着空。.谢谢你清理了这个问题。对不起,我知道这些都是非常基本的问题。我现在已将其更改为不为空(我认为),但它仍然没有执行 else 语句
0赞 Aleo111 4/9/2022
'case 2: System.out.println(“选项 2:显示所有项目”);for(int i=0; i < myMonths.length; i++){ if(myMonths.length != 0){ //如果数组不为空,则显示所有项目 System.out.println(myMonths[i] + “ ”); }else{System.out.println(“No values entered”);} //如果数组为空,则显示此消息 } break;'
0赞 Pshemo 4/9/2022
else的意思是 .但是在这种情况下,您的循环甚至不会迭代一次,因为开始时的条件(其中)将被评估为 which 是假的,因此循环将停止。这意味着你不会在“死”内执行代码(它永远不会被执行)。if(myMonths.length != 0)myMonths.length == 0for(int i=0; i < myMonths.length; i++)i < myMonths.lengthi=00 < 0if/elseelse

答:

0赞 obeid salem 4/9/2022 #1

您的代码 :

    for(int i=0; i < myMonths.length; i++){
        if(myMonths.length != 0){    //if the array is not empty display all items

        System.out.println(myMonths[i] + " ");
        }

         else{System.out.println("No values entered");} //if array is empty display this message

        }

如果那时它会检查长度!myMonths.length > 0

您的代码应为:

if(myMonths.length > 0){
     // print the values 
    for(int i=0; i < myMonths.length; i++){
        System.out.println(myMonths[i] + " ");
     }

} else {

      System.out.println("No values entered");

}

更新:

在创建数组之前 ..向用户询问尺寸, 然后您可以检查是否为空

System.out.println("inter the size:");
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
int[] arr = new int[size];
if (arr.length > 0) {
  // do your loop
  System.out.println("Not Empty");
} else {
  // Empty array
  System.out.println("Empty");
}

评论

0赞 Aleo111 4/9/2022
感谢您的回答!不过它仍然不起作用。你认为这可能是因为我的数组在一个单独的文件中的 setter 方法中吗?
0赞 Aleo111 4/9/2022
public void setMyMonths(int[] values){ //声明 setter method myMonths = values;
0赞 obeid salem 4/9/2022
还行。。您确定您正在感染病例 2 吗?你明白了吗?System.out.println("Choice 2: Display all items");
0赞 Aleo111 4/9/2022
我再次添加它进行检查,是的,它正在运行
0赞 Aleo111 4/9/2022
只是由于某种原因没有执行 else 语句,当我在未向数组输入任何元素后运行它时,它只是打印出几个零