2015-11-02 3 views
1

Я совершенно не знаком с Java, так что простите меня за то, что я идиот об этом. Я должен написать статический метод isStrictlyIncreasing(double[] in), который возвращает true, если каждое значение в данном массиве больше, чем значение перед ним, или false в противном случае. Кроме того, я не могу использовать java.util.ArrayList.Что случилось с моим методом?

Вот мой код:

public static void main(String[] args) { 

    double in[] = new double[]{45, 15, 25, 79, 89, 45, 66, 33, 56, 105}; 
    Sort(in); 
    System.out.println("Answer: " + Sort(in)); 
} 

private static boolean Sort(double[] in) { 
    int n = in.length; 
    int temp = 0;  
    for(int i = 0; i < n; i++){ 
     for(int j = 1; j < (n-i); j++){ 
      if(in[j - 1] < in[j]){ 
       return true; 
      } 
      return false; 
     } 
    } 

К сожалению, я просто продолжаю получать список «Верно, верно, верно ... Ответ: ложный»

Я знаю, что есть что-то не так с моим методом , возможно, в if-заявлении и задавался вопросом, может ли кто-нибудь помочь мне.

+0

Ваш внутренний цикл будет всегда повторяться только один раз. 'Return false' всегда будет выполняться, если' return true' не делает и поэтому заканчивает цикл. Что ты пытаешься сделать? –

+0

"* К сожалению, я просто продолжаю получать список" true, true, true ... Answer: false "*", что невозможно с кодом, который вы отправили, потому что он даже не компилируется, поэтому его нельзя запускать и генерировать результат. Пожалуйста, обновите свой вопрос с минимальным, но полным примером, который позволит нам воспроизвести вашу проблему. – Pshemo

ответ

1

Вам не нужно просто проверять только значение непосредственно перед этим? Вы вернете false, как только ваше условие не будет выполнено. Иначе это вернет истину.

public static void main(String[] args) { 

     double in[] = new double[]{45, 15, 25, 79, 89, 45, 66, 33, 56, 105}; 
     Sort(in); 
     System.out.println("Answer: " + Sort(in)); 
    } 

    private static boolean Sort(double[] in) { 
     int n = in.length; 
     int temp = 0;  
     for(int i = 1; i < n; i++){ 
      if(in[i - 1] < in[i]) 
       return false; 
     } 
     return true; 
    } 
+0

Правда, спасибо @Pshemo –

+0

Вы правы ... Время спать -_- –

+1

psssstttt: спасибо. Во всяком случае, кто-то сделал это правильно раньше ... GN! –

3

Во-первых, в Java принято использовать имена методов camelCase. То есть,

private static boolean Sort(double[] in) { 

должен стать

private static boolean sort(double[] in) { 

Во-вторых, возвращение заявления используются для возврата из метода, так что вы, вероятно, не хотят возвращаться после каждой проверки. Скорее всего, вы хотели бы сделать что-то вроде так,

private static boolean Sort(double[] in) { 
    int n = in.length; 
    int temp = 0; 
    for (int i = 0; i < n; i++) { 
     for (int j = 1; j < (n - i); j++) { 
      if (in[j - 1] > in[j]) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

Что это будет сделать, это вернуть ложь, если следующее число в последовательности не больше, чем значение перед ним. И тогда, если он проходит через циклы for без запуска, то мы знаем, что они должны быть в порядке возрастания, поэтому возвращаем true

1

вам не нужна двойная петля, так как вы проверяете только последовательные значения.

private static boolean Sort(double[] in) { 
     int n = in.length; 

     for(int i = 1; i < n-1; i++){ 
       if(in[i - 1] < in[i]){ 
        return true; 
       } 

      } 
     return false; 
     } 
Смежные вопросы