查找数组错误中的最小数字

时间:2014-11-13 23:05:47

标签: java arrays for-loop

我试图在1000个可能的插槽数组中找到最小的数字但是我的代码仍然返回0,即使0不是我的输入之一。我的问题是在最后一个for循环中,其余的代码工作。这是我的代码:

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
public class SmallestNumber
{

    public static boolean isInteger(String num)
    {
        boolean again=false;
        try 
        { 
            int d= Integer.parseInt(num); 
            again=true;
        } 
        catch(NumberFormatException e)
        { 
            again=false; 
        }
        return again;   
}
public static void main(String[] args) 
{

    int [] intNum = new int[1000];
    int i=0;
    String num;
    boolean repeat = false;
    String done="done";
    Scanner inData = new Scanner(System.in);
    System.out.println("You can enter up to 1000 integers." + "\n" + "Enter 'done' to finish");

        while (!repeat)
        {
            System.out.print("Int: ");
            num=inData.next();
            repeat=isInteger(num);


            if (repeat==false)
                {   
                    String entry=num.toUpperCase();
                    boolean equals=entry.equals("DONE");

                            if (equals==true)
                                {
                                    repeat=true;
                                }
                            else
                                {
                                    System.out.println("Error: you did not enter a valid chracter. Please enter a interger or state 'done'");
                                    repeat=false;
                                }

                }
            else
                {
                    int number=Integer.parseInt(num);
                    intNum[i]=number;
                    i=i+1;
                    if(i<1000)
                        {
                            repeat=false;
                        }
                    else
                        {
                            repeat=true;
                        }
                }

        }       


                int temp=intNum[0];
                for(int j=1;j<intNum.length;j++)
                {

                    if (intNum[j]<temp)
                    {

                intNum[j]=temp;
                    }
                    else
                    {

                    }
                }

            System.out.print(temp);

        }


}

3 个答案:

答案 0 :(得分:1)

您没有说明实际输入了多少个整数,但问题是您正在迭代intnum.length次。您已将输入字段声明为1000个元素的数组,length将始终为1000,即使用户输入的整数较少。一旦你的代码飞过了你实际输入的整数,它就会达到数组初始化的0。

答案 1 :(得分:0)

过程:

  1. 提示用户
  2. 验证输入:IF输入NaN跳过,ELSE添加到ArrayList的{​​{1}}
  3. 按升序排序数组列表
  4. 索引0处的值是最小的
  5. 您的其他所有内容都不适合此过程,或者不合适或不需要。

    <强>更新

    Integers

    这完全是标题所暗示的,没有所有额外内容。大卫华莱士建议这可能是矫枉过正的。我不确定是不是。没有时间进行基准测试。我明天要去旅行。也许有人可以评论它。

答案 2 :(得分:0)

嗨我通过将循环结束长度更改为i并切换

来解决问题
intNum[j]=temp; 

temp=intNum[j];

再次感谢