2014-09-23 5 views
-3

.txt файл имеет следующие значения:массива возвращает значение

Этот код предназначен для чтения номера в .txt-файле, затем сохраняется в массиве. Затем используйте метод, чтобы найти наибольшее число и вернуть значение. У меня ошибка при запуске. Что я сделал не так?

import java.io.File; 
import java.util.Scanner; 

public class MinOppgave4 { 
public static void main(String[]args)throws Exception{ 

    String fileName = "MinOppgave4tekst.txt"; 
    File mineFile = new File(fileName); 
    Scanner in = new Scanner(mineFile); 
    int[] num = new int [5]; 

    for(int i=0; i<num.length; i++) 
    { 
     num[i]=in.nextInt(); 
     System.out.println(num[i]); 
    } 

    System.out.println("The biggest number is: "+GetTheBiggestNum(num)); 
} 


public static int GetTheBiggestNum(int[] num) 
{ 
    int biggestNum = 0; 
    if ((num[0] > num[1]) && (num[0] > num[2]) && (num[0] > num[3]) && (num[0] > num[4]) && (num[0] > num[5])) 
    { 
     biggestNum = num[0]; 
    } 
    else if ((num[1] > num[0]) && (num[1] > num[2]) && (num[1] > num[3]) && (num[1] > num[4]) && (num[1] > num[5])) 
    { 
     biggestNum = num[1]; 
    } 
    else if ((num[2] > num[0]) && (num[2] > num[1]) && (num[2] > num[3]) && (num[2] > num[4]) && (num[2] > num[5])) 
    { 
     biggestNum = num[2]; 
    } 
    else if ((num[3] > num[0]) && (num[3] > num[1]) && (num[3] > num[2]) && (num[3] > num[4]) && (num[3] > num[5])) 
    { 
     biggestNum = num[3]; 
    } 
    else if ((num[4] > num[0]) && (num[4] > num[1]) && (num[4] > num[2]) && (num[4] > num[3]) && (num[4] > num[5])) 
    { 
     biggestNum = num[4]; 
    } 
    else 
    { 
     biggestNum = num[5]; 
    } 
    return biggestNum; 
} 

} 
+1

Почему бы просто не отладить эту простую программу? Это займет меньше времени, и вы узнаете гораздо больше. – nogard

+3

Какая ошибка? –

+0

Вы читали о классе java 'List' и' Collections.sort() '? – vikingsteve

ответ

1

Ваш код ссылки num[5], однако создать массив из 5 значений, которые будут num[0] к num[4]. Таким образом, вы выходите за пределы своего массива.

Одним из распространенных способов поиска самого большого элемента является сортировка вашего массива, а затем выбор первого (или последнего) элемента в отсортированном массиве.

Java также способ сделать это с Collections.max, вы можете просто сделать:

int biggest = Collections.max(Arrays.asList(num)) 

Однако, если вы хотите сделать это самостоятельно, гораздо лучше, чем ваш текущий подход заключается в перебрать массив и найти наибольшее значение:

public static int GetTheBiggestNum(int[] num) { 
    if (num.length == 0) { 
     throw new IllegalArgumentException("Array cannot empty") 
    } 

    int biggest = num[0]; 
    for (int i = 1; i < num.length; i++) { 
     if (num[i] > biggest) 
     biggest = num[i]; 
    } 
    return biggest; 
} 
+0

да, не видел число [5] до этого момента. благодаря – Candy

0

Измените свою петлю на это. Наивысшее будет самым высоким.

int highest = 0; 
for(int i=0; i<num.length; i++) 
{ 
    num[i]=in.nextInt(); 
    System.out.println(num[i]); 
    if(highest < num[i]){ 
     highest = num[i]; 
    } 
} 

Если вы меняете свой цикл на это, вам даже не нужен этот другой метод.

0

размера вашего массива => 5. Можно получить доступ только 0 to 4 для массива с длиной 5.

Но в вашем коде, доступ к num[5], он будет бросает ArrayIndexOutofBoundsException.

Одна вещь, почему бы не Google найти максимальное число в массиве. Например, это SO

0

Там должно быть ArrayIndexOutOfBoundsException, потому что у вас есть 5 элементов в массиве NUM, и вы пытаетесь получить доступ к Num [5] внутри метода GetTheBiggestNum, который не exist.You мог бы использовать другие лучшие способы получить максимальный элемент из целочисленного массива.