2016-04-18 5 views
-2

Sag mir, was ich vermisse?Zeigt ganze Zahlen vom ersten bis zum letzten C-Step-Schritt an. Wenn die Ausgabe zu Endlosschleifen führen kann, eine Ausnahme auslösen IllegalArgumentException

Input Arguments 

1, 8, 2 

8, 1, -2 

1, 8, -2 

Result 

1 3 5 7 

8 6 4 2 

IllegalArgumentException 

Mein Code:

package com.Star; 

public class Main { 

    public static void main(String[] args) { 
     rangeWithStepPrinter(1,8,5); 
     rangeWithStepPrinter(8,1,-2); 
     rangeWithStepPrinter(1,8,-2); 
    } 

    public static void rangeWithStepPrinter(int first, int last, int i) { 
     if (first < last) { 
      for (i = first; i <= last; i += +2) { 
       System.out.print(i + " "); 
      } 
     } 

     if (first > last) { 
      for (i = first; i >= last; i += -2) { 
       System.out.print(i + " "); 
      } 
     } 

     System.out.println(); 
    } 
} 
+1

Sagen Sie uns, was das Problem ist. Sie könnten eine beliebige Anzahl von Dingen vermissen, wie sollen wir es ohne eine detaillierte Erklärung des Problems wissen und wo Sie Probleme haben? –

+2

[Nichts in diesem Code löst eine "IllegalArgumentException" aus (http://ideone.com/HbF7LV). Beachten Sie, dass Sie den Parameter "i" ignorieren. –

+0

Ich bekomme 1 3 5 7 für die letzte –

Antwort

2

Sie wiederverwenden "int i" als Parameter. Siehe Anpassungen unten:

public class Main { 

public static void main(String[] args) { 

    rangeWithStepPrinter(1,8,2); 
    rangeWithStepPrinter(8,1,-2); 
    rangeWithStepPrinter(1,8,-2); 
} 

public static void rangeWithStepPrinter(int first, int last, int interval) { 
    if (first < last) { 
     if(interval <= 0){ 
      throw new IllegalArgumentException("Invalid interval"); 
     } 
     for (int i = first; i <= last; i += interval) { 
      System.out.print(i + " "); 
     } 
    } 
    if (first > last) { 
     if(interval >= 0){ 
      throw new IllegalArgumentException("Invalid interval"); 
     } 
     for (int i = first; i >= last; i += interval) { 
      System.out.print(i + " "); 
     } 
    } 
    System.out.println(); 
    } 
} 
+1

Beachten Sie, dass Sie eigentlich "interval <= 0" und "interval> = 0" die Ausnahme auslösen möchten, da ein Intervall von "0" eine unendliche gibt Schleife. –

+0

@AndyTurner, Ah ja, guter Fang. –

+0

@AndyTurner, Aus Gründen der Einfachheit habe ich mich entschieden, nur die Frage zu beantworten, die OP hatte, und nicht zu sehr von seiner ursprünglichen Lösung abzuweichen. –

0

ich das Problem auf diese Weise durch den Scanner gelöst alle Nun, wenn die Konsole geben Sie die Argumente, dass die Ergebnisse die gleichen :)

package com.Star; 

import java.util sind .Scanner;

public class Haupt {

public static void main(String[] args) throws IllegalAccessException { 

    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter num: "); 
    int a = scanner.nextInt(); 
    System.out.println("Enter num: "); 
    int b = scanner.nextInt(); 
    System.out.println("Enter num: "); 
    int c = scanner.nextInt(); 

    rangeWithStepPrinter(a, b, c); 

} 

private static void rangeWithStepPrinter(int first, int last, int i) throws IllegalAccessException { 

    if (first < last) { 
     for (i = first; i <= last; i += +2) { 
      System.out.print(i + " "); 
     } 
    } 
    else if (first > last) { 
     for (i = first; i >= last; i += -2) { 
      System.out.print(i + " "); 
     } 
    } 
    if(first < last && i <= 0 ){ 
     throw new IllegalAccessException(); 
    } 

    System.out.println(); 
} 

}