2014-11-13 31 views
0

查找最小的数字,我试图寻找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); 

     } 


} 
+1

时间的长度,解决了这个问题精益如何使用IDE的调试器。真。 – OldProgrammer

+1

看看这行 - “intNum [j] = temp;'并向我解释它在做什么。然后改变它应该是什么。 –

+0

此外,你有变量称为'我','数字','数字','温度'和'intNum'。你怎么可能跟踪每个人的目标?请为所有变量使用更多信息名称。 –

回答

1

你没有说你是多少整数实际进入,但问题是,你迭代intnum.length倍。你宣布你的输入字段1000个元素的数组,length永远是1000,即使用户已经进入比少整数。一旦你的代码已经飞过了你实际输入的整数,它将达到数组的初始化0。

+0

这是有道理的,是有办法的for循环的长度设置为只数组的初始化元素? – OoOoOoOoOoO

+0

没有。这个数组对于Java来说只有1000个整数,所以最初的零和数据输入一样有效。您必须记录您记录的有效条目数量,看起来您已经使用i变量进行了处理。 – brycem

0

的方法:

  1. 提示用户
  2. 验证输入:IF输入的NaN跳过,ELSE添加到IntegersArrayList
  3. 排序阵列列表以升序
  4. 在索引0处的值是最小

一切都在你的其他不适合这个过程中要么是出来的地方或不需要。

UPDATE

public static void main(String[] args) 
{ 
    List<Integer> numbers = new ArrayList<Integer>(1000); 
    Scanner inData = new Scanner(System.in); 
    System.out.println("You can enter up to 1000 integers." + "\n" 
      + "Enter 'done' to finish"); 
    String input = ""; 
    do 
    { 
     input = inData.next(); 
     try 
     { 
      numbers.add(Integer.parseInt(input)); 
     } 
     catch(NumberFormatException e) 
     { 
      System.out.println(input + " is not a number. Skipping..."); 
     } 
    } while (!input.equalsIgnoreCase("done")); 

    Collections.sort(numbers); 

    inData.close(); 
    System.out.println("Smallest number: " + numbers.get(0)); 
} 

这不正是标题建议没有所有的临时演员。大卫华莱士认为这可能是过度的。我不确定。没有时间进行基准测试。我明天必须收拾行程。也许有人可以对此发表评论。

+0

排序数组似乎对我来说过分。你只需要通过一遍就可以找到最低的数字。 OP的原始算法比这更有效率 - 他/她在执行它时只有一些小错误。 –

0

您好我通过改变循环的结束对我,再次切换

intNum[j]=temp; 

temp=intNum[j]; 

感谢