2014-11-13 68 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]; 

感謝