【问题标题】:Looping with different variables?循环使用不同的变量?
【发布时间】:2014-02-05 18:04:21
【问题描述】:

在此之前,用户为 numOfTimes 输入一个 int。说它是 5。这将问这个问题 5 次。但每次通过它都会擦除 hrs1 中的先前值。它需要是一个单独的变量。因此,如果 numOfTimes=5 那么我应该为“Hour”获得 5 个不同的双打,为“Minute”获得 5 个不同的双打。 (假设用户输入不同的时间)但它们都需要存储在不同的变量中。我该怎么做?

谢谢我的问题已经得到解答!

【问题讨论】:

标签: java variables loops for-loop


【解决方案1】:

使用数组..

int a[] = new int[5];
for(int i =0;i<5;i++){
    a[i] = //your value
}

【讨论】:

    【解决方案2】:

    您只需将“计算平均值”代码放在 for 循环之外。我不确定你想如何计算平均值。但这里有两种简单的方法。

    方法一 - 跟踪总数并计算基本平均值。

    public class AvgTime {
    
      public static void main(String[] args) {
    
        Scanner in = new Scanner(System.in);
    
    
        System.out.print("How many times? ");
        int numOfTimes = in.nextInt();
        System.out.println("\n");
    
        double hrTotal = 0;
        double minTotal = 0;
    
        for (int i = 1; i <= numOfTimes; i++){
    
          System.out.println("What Time (military time):  ");
          System.out.print("Hour  ");
          double hrs1 = in.nextDouble();
          System.out.print("Minute  ");
          double min1 = in.nextDouble();
    
          hrTotal += hrs1;
          minTotal += min1;
        }
    
        //calculate average
        double avdHr1 = hrTotal/numOfTimes;
        double timeMin1 = minTotal/numOfTimes;
    
        System.out.println(avgHr1+":"+timeMin1 + " P.M");
      }
    }
    

    方法 2 - 使用列表并迭代两次

    公共类 AvgTime {

      public static void main(String[] args) {
    
        Scanner in = new Scanner(System.in);
    
    
        System.out.print("How many times? ");
        int numOfTimes = in.nextInt();
        System.out.println("\n");
    
        ArrayList<Double> hours = new ArrayList<>();
        ArrayList<Double> minutes = new ArrayList<>();
        double minTotal = 0;
    
        for (int i = 1; i <= numOfTimes; i++){
    
          System.out.println("What Time (military time):  ");
          System.out.print("Hour  ");
          double hrs1 = in.nextDouble();
          System.out.print("Minute  ");
          double min1 = in.nextDouble();
    
          hours.add(hrs1);
          minutes.add(min1);
        }
    
        //calculate average
        double avgHr1 = 0;
        double timeMin1 = 0:
        for (int i = 0; i < hours.size(); i++) {
          double hour = hours.get(i);
          double minute = minutes.get(i);
    
          //ToDo: calculate average so far
    
        }
    
        System.out.println(avgHr1+":"+timeMin1 + " P.M");
      }
    

    【讨论】:

    • 感谢您,这对您有很大帮助。
    • @user3250237 如果有帮助,请投票或将其标记为答案。谢谢
    【解决方案3】:

    您可以使用数组来存储用户输入的信息。在循环之前,使用 new 关键字创建一个数组,例如double[] hrs=new double[numOfTimes]。在循环中,为每个输入写入数组中的不同位置hrs[i]=in.nextDouble()。稍后您可以使用语法“name[index]”从数组中的某个位置读取,例如“hrs[2]”。请注意,对于 java 和许多其他语言,数组从 0 开始。这意味着对于名为 arr 的数组 [1,2,3],arr[1] 等于 2 而不是 1。这意味着最好更改 for 循环从for(int i=1;i&lt;=numofTimes;i++) 到 'for(int i=0;i

    【讨论】:

      【解决方案4】:

      &lt;SOAPBOX,RANT,HIGHHORSE&gt;

      这更像是一次代码审查,而不是一个直接的答案,但是我在 stackoverrflow 上观察到的新手问题一直困扰着我。

      在开发时,我避免像瘟疫一样使用键盘输入。这是一种苦差事,尤其是在这个程序中的循环中。很多新手问题都有用户键盘输入。为什么?!这让开发变得更加困难!

      我已经重写了您的程序以添加测试数据的功能,从而完全避免了在开发过程中对用户输入的需求。测试结束后,只需切换 test/live cmets。

      我确信有一种更优雅的方式,但这种方式对我来说效果很好,我推荐它。

      &lt;/SOAPBOX,RANT,HIGHHORSE&gt;

      import java.util.*;
      import static java.lang.Math.abs;
      
      public class AverageTimeWTestingData  {
      
         public static void main(String[] args) {
      
            HourMin24[] ahm = null;
      
            //EXACTLY ONE of the following lines must be commented out
            //Test only:
               ahm = getTestData();
            //Live only:
            // ahm = getDataFromUserInput();
      
            double dTotalHours = 0.0;
            for (HourMin24 hm : ahm){
               System.out.println("Time: " + hm.iHour + ":" + hm.iMin);
               dTotalHours += hm.iHour + (hm.iMin / 60);
            }
      
            System.out.println("Average time (" + ahm.length + "): " + (dTotalHours / ahm.length));
         }
         private static final HourMin24[] getDataFromUserInput()  {
            Scanner in = new Scanner(System.in);
      
            System.out.print("How many times? ");
            int numOfTimes = in.nextInt();
            ArrayList<HourMin24> al24 = new ArrayList<HourMin24>(numOfTimes);
            while(numOfTimes < 0)  {
               System.out.println("What Time (military time):  ");
               System.out.print("Hour  ");
               int iHour = in.nextInt();
               System.out.print("Minute  ");
               int iMin = in.nextInt();
      
               al24.add(new HourMin24(iHour, iMin));
      
               numOfTimes--;
            }
      
            return  al24.toArray(new HourMin24[al24.size()]);
         }
         private static final HourMin24[] getTestData()  {
            System.out.println("TEST MODE ON");
            return  new HourMin24[] {
               new HourMin24(13, 1),
               new HourMin24(23, 19),
               new HourMin24(0, 59),
               new HourMin24(16, 16),
            };
         }
      }
      class HourMin24  {
         public int iHour;
         public int iMin;
         public HourMin24(int i_hour, int i_min)  {
            iHour = i_hour;
            iMin = i_min;
         }
      }
      

      输出:

      [C:\java_code\]java AverageTimeWTestingData
      TEST MODE ON
      Time: 13:1
      Time: 23:19
      Time: 0:59
      Time: 16:16
      Average time (4): 13.0
      

      【讨论】:

        猜你喜欢
        • 2017-11-16
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-23
        • 2020-09-06
        • 2020-11-12
        相关资源
        最近更新 更多