【问题标题】:Java - How to break out of for loop by comparing items in an arrayJava - 如何通过比较数组中的项目来跳出 for 循环
【发布时间】:2015-10-23 19:42:16
【问题描述】:

如果用户输入 99999,我需要跳出 for 循环。下面的代码不会破坏循环,实际上将 99999 计算为平均值。提前感谢您的帮助。

 import java.util.*;
 public class DistanceFromAverage {

 public static void main(String[] args)
 {
  //User input
  Scanner input = new Scanner(System.in);
  double[] someNum = new double[10];
  double sum = 0;
  double avg;


  for(int x =0; x < someNum.length; x++)
  {  

         if(someNum[x] != 99999)

         {            
         System.out.print("Enter a number >>");
         someNum[x] = input.nextDouble();

         sum = sum + someNum[x];
         }
         else
         {break;}         
  }
  //Figuring the average
  avg = sum/10;

  //Output
   for(int y = 0; y < someNum.length; y++)
   {
     double distance = (someNum[y]-avg);

     System.out.print(someNum[y]);
     System.out.println("   Distance from average >> " + distance);
   }
     System.out.println("Average>> " + avg); 
 }
}

【问题讨论】:

  • 您正在检查 x 的当前元素,但您应该检查 x-1。您可以在 if 语句之前移动您的 someNum[x] = input.nextDouble();

标签: java loops break


【解决方案1】:

你的逻辑搞砸了。您要求用户提供最多 10 个号码。您已将输入数字数组默认为 0。当用户输入 99999 时,它会被添加到数组中,然后在下一次循环时,它会查找下一个与 99999 进行比较的数字并得到 0。

整个逻辑应该重新安排,要求最多 10 个号码,立即检查号码。如果用户输入 99999,则中断。否则,将它们放入一个数组中,保持计数,然后取平均值。

【讨论】:

    【解决方案2】:

    我没有对此进行测试,但我已经重新安排了一点逻辑,这应该会让你走上正确的道路。

     List<Double> someNum = new ArrayList<Double>();
     do {
         System.out.print("Enter a number >>");
         double thisNum = input.nextDouble();
         if (thisNum == 99999) {
             break;
         }else {
             someNum.add(thisNum);
             sum += thisNum;
         }
     }while (true);
    
     //Figuring the average
     avg = someNum.size() == 0 ? 0 : sum / someNum.size();
     for(double thisNum : someNum) {
         double distance = (thisNum - avg);
         System.out.print(thisNum);
         System.out.println("   Distance from average >> " + distance);
     }
     //Output
     System.out.println("Average>> " + avg);
    

    【讨论】:

      【解决方案3】:

      将其用作for 块怎么样:

            System.out.print("Enter a number >>");
            double inputValue = input.nextDouble();
            if(inputValue == 99999){
               break;
            }
            someNum[x] = inputValue;
            sum = sum + someNum[x];  
      

      您将无法按原样在循环外使用x,因此可以使用另一个变量或更改for 语句以不将x 声明为循环本地。

      使用经过深思熟虑的while 循环会更好。

      【讨论】:

        【解决方案4】:

        您可以使用 ArrayList 并简单地为 getInput() 方法指定循环递增 10 倍,然后指定循环仅根据 ArrayList 的 .size() 计算平均值。

        这应该会为您解决问题,并正确分解并根据输入的数字计算平均值,直到 99999。

        import java.util.*;
        
        class DistanceFromAverage {
        
            ArrayList<Double> numbers = new ArrayList<Double>();
            double sum = 0;
            double avg;
        
            DistanceFromAverage() {
                getInput();
                calculateAverage();
                showOutput();
            }
        
            void getInput() {
                Scanner input = new Scanner(System.in);
                for (int x = 0; x < 10; x++) {
                    System.out.println("Enter a number >>");
                    double num = input.nextDouble();
                    if (num == 99999) break;
                    else {
                        numbers.add(num);
                        sum += num;
                    }
                }
            }
        
            void calculateAverage() {
                avg = sum / 10;
            }
        
            void showOutput() {
                for (int x = 0; x < numbers.size(); x++) {
                    double distance = (numbers.get(x) - avg);
                    System.out.println(numbers.get(x) + " Distance from average >> " + distance);
                }
                System.out.println("Average >> " + avg);
            }
        
            public static void main(String[] args) {
                new DistanceFromAverage();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2014-07-20
          • 2022-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-05
          • 1970-01-01
          • 2019-01-09
          • 2019-02-23
          相关资源
          最近更新 更多