【问题标题】:My array takes in the sentinel value as an array element and then terminates我的数组将标记值作为数组元素接收,然后终止
【发布时间】:2013-09-11 17:10:10
【问题描述】:

我正在编写一个接收用户输入并生成最小值的程序。 输入 10 次后,用户可以输入一个负数作为标记退出循环。 问题是这行得通,但由于某种原因,循环也将哨兵值作为数组元素。谁能告诉我怎么了?

public class java {

   public static void main(String[] args) {
   {

      double[] a=new double[10];
      Scanner arr=new Scanner(System.in);

      System.out.println("Please enter values");

      int size = 0;

      int x = 0;

      while ( x >= 0 )
      {
         System.out.println("Enter next value");    
         x = arr.nextInt();

         a[size]=x;
         size++;                   
      }

      System.out.println( "Minimum Value" );

      System.out.println((min(a)));
   }
}

public static double min( double[] arr )
{
   double minimum= arr[0];
   for (int i=1; i<arr.length; i++)
   {
      if (arr[i] < minimum)
      {
         minimum= arr[i];
      }
   }

   return minimum;
}

【问题讨论】:

    标签: java arrays sentinel


    【解决方案1】:
    while ( x >= 0 )
    {
        System.out.println("Enter next value"); 
        x = arr.nextInt();
    
        if(x >= 0) //Add this if block
        {
            a[size]=x;
            size++;         
        }
    }
    

    另外,改变这一行:

    double[] a=new double[10];
    

    int[] a = new int[10];
    

    最后,当你创建一个基元int(或double)时,即使是在一个数组中,默认值也是0。因此,如果您输入 -999 作为您的第一个输入,您的数组将如下所示:

    {0,0,0,0,0,0,0,0,0,0}

    【讨论】:

    • 如果您输入 0 作为输入,这将是有意义的。 0 不是负数。如果您打算排除 0,那么您需要将 &gt;= 更改为简单的 &gt;
    • 不,我的意思是如果我输入 -999 作为哨兵,它会给我最小值为 0。
    • @GrigoriMelnik - 你在说什么?
    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2021-08-11
    • 2018-08-28
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多