2014-09-11 93 views
1

當我使用循環進行減法時,我沒有得到正確的輸出。如何在Java中使用for循環減去n個數字?

我應該在我的代碼中應用什麼邏輯來正確使用for循環來減法?

請幫助我,因爲我是新的JAVA。

我的代碼如下:

import java.io.*; 
import java.util.*; 

class Sub 
{ 
    public static void main(String args[]) 
    { 
     Scanner s=new Scanner(System.in); 
     int a,n,i; 
     String yn; 
     boolean loop=true; 

     while(loop) 
     { 
      try 
      { 
       do 
       { 
        loop=true; 
        System.out.println("Enter how many numbers to Subtract?: "); 
        n=s.nextInt(); 
        int sum=0; 
        for(i=1;i<=n;) 
        { 
         try 
         { 
          System.out.println("Enter number "+i+" : "); 
          a=s.nextInt(); 
          sum=a-sum; 
          i++; 
         } 
         catch(Exception e) 
         { 
          System.out.println("Invalid Entry. Try again!!"); 
         } 
        } 
        System.out.println("Answer is:"+sum); 
        System.out.println("Do you want to continue?(Y/N): "); 
        yn=s.next(); 
        loop=yn.equals("Y")||yn.equals("y"); 
       }while(loop); 
      } 
      catch(Exception e) 
      { 
       System.out.println("Re-enter the Limit"); 
      } 
     } 

    } 
} 
+1

我可能會得到的第一個值,使該'sum'值,然後遍歷剩餘價值... – MadProgrammer 2014-09-11 03:14:43

+0

可能問題是@ this statemeent:sum = a-sum;我真的不明白它的目的是什麼。 – Thinhbk 2014-09-11 03:16:20

+0

@ MadProgrammer-OP也做了與你的想法沒有什麼不同的事情,但是,由於'sum = 0'和'sum = a-sum',有一點點複雜! – 2014-09-11 03:16:32

回答

1

你應該sum作爲第一個數字(不爲零)開始,並從中減去的數字休息:

loop=true; 
    System.out.println("Enter how many numbers to Subtract?"); 
    n=s.nextInt(); 
    int sum=0; 
    for(i=1;i<=n;) 
    { 
     try 
     { 
      System.out.println("Enter number "+i+" : "); 
      a=s.nextInt(); 
      sum=a-sum; 
      i++; 
     } 
     catch(Exception e) 
     { 
      System.out.println("Invalid Entry. Try again!!"); 
     } 
    } 

到:

... 
loop = true; 
System.out.println("Enter how many numbers to Subtract?: "); 
n = s.nextInt(); 
System.out.println("Enter number 1 : "); 
int sum = s.nextInt(); 
for (int i=2; i <= n; i++) { 
    try { 
     System.out.println("Enter number " + i + " : "); 
     a = s.nextInt(); 
     sum -= a; 
    } catch (Exception e) { 
     System.out.println("Invalid Entry. Try again!!"); 
    } 
} 
... 

另外,不是這樣做:

yn.equals("Y") || yn.equals("y") 

您可以使用equalsIgnoreCase()

yn.equalsIgnoreCase("Y") 

而在去年,你應該爲變量使用有意義的名稱(我們建議要養成良好的習慣,即使是這樣一個小程序),所以不是:

int a, n, i; // you can define and use i inside the for-loop - no need to define it outside 
    String yn; 

考慮使用更傳神的名字,如:

int inputNumber, numberOfVariables; 
    String continueLooping; 

以下版本可以提高(甚至進一步重構):

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    while (true) { 
     int numOfArguments = getNumberOfArguments(scanner); 
     int sum = getNextNumberFromUser(scanner, 1); 
     for (int i = 2; i <= numOfArguments; i++) { 
      sum -= getNextNumberFromUser(scanner, i); 
     } 
     System.out.println("Answer is: " + sum + "\n\nDo you want to continue?(Y/N): "); 
     String runAgain = scanner.next(); 
     if (runAgain.equalsIgnoreCase("N")) { 
      break; 
     } 
    } 
} 

private static int getNextNumberFromUser(Scanner scanner, int i) { 
    while (true) { 
     try { 
      System.out.println("Enter number " + i + " : "); 
      return scanner.nextInt(); 
     } catch (InputMismatchException e) { 
      System.out.println("Invalid Entry. Try again!!"); 
      scanner.nextLine(); 
     } 
    } 
} 

private static int getNumberOfArguments(Scanner scanner) { 
    int numberOfArguments = -1; 
    System.out.println("Enter how many numbers to Subtract?: "); 
    while (numberOfArguments == -1) { 
     try { 
      numberOfArguments = scanner.nextInt(); 
      if (numberOfArguments <= 0) { 
       numberOfArguments = -1; 
      } 
     } catch (InputMismatchException e) { 
      System.out.println("Illegal number of arguments to subtract, please try again: "); 
      scanner.nextLine(); 
     } 
    } 
    return numberOfArguments; 
} 
+0

非常感謝,它工作。今後我會牢記這些觀點。 – 2014-09-12 10:36:48

+0

但是,如果我發出第一個數字作爲字符串,它應該再次要求輸入第一個數字,然後繼續下一步。請幫忙 – 2014-09-12 11:20:40

+0

@MohammedRampurawala這就是爲什麼我們在for循環中啓動'i'從2開始:'for(int i = 2; i <= n; i ++)'。 – alfasin 2014-09-12 21:02:59