2017-05-15 4 views
-6

Pouvez-vous trouver la source de l'erreur dans ce?Utilisation de Private static

enter image description here

package calc; 

import java.util.Scanner; 

public class Calc { 



    Scanner scan = new Scanner(System.in); 

    public void add() { 
     System.out.println("Enter 1st number"); 
     int s1 = scan.nextInt(); 
     scan.nextLine(); 
     System.out.println("Enter 2nd number"); 
     int s2 = scan.nextInt(); 
     scan.nextLine(); 

     int sum = s1 + s2; 
     System.out.println("The sum is: " + sum); 

    } 

    public void diff() { 
     System.out.println("Enter 1st number"); 
     int d1 = scan.nextInt(); 
     scan.nextLine(); 
     System.out.println("Enter 2nd number"); 
     int d2 = scan.nextInt(); 
     scan.nextLine(); 

     int diff = d1 - d2; 
     System.out.println("The difference is: " + diff); 

    } 

    public void prod() { 
     System.out.println("Enter 1st number"); 
     int p1 = scan.nextInt(); 
     scan.nextLine(); 
     System.out.println("Enter 2nd number"); 
     int p2 = scan.nextInt(); 
     scan.nextLine(); 

     int prod = p1 + p2; 
     System.out.println("The product is: " + prod); 
    } 

    public void quo() { 
     System.out.println("Enter 1st number"); 
     int q1 = scan.nextInt(); 
     scan.nextLine(); 
     System.out.println("Enter 2nd number"); 
     int q2 = scan.nextInt(); 
     scan.nextLine(); 

     int quo = q1 + q2; 
     System.out.println("The quotient is: " + quo); 
    } 

    public static void main(String[] args) { 
     do { 

      Calc op = new Calc(); 
      Scanner scan = new Scanner(System.in); 
      char ans = 0; 

      System.out.println("Calculator"); 
      System.out.println("1.Addition\n" + "2.Subtraction\n" + "3.Multiplication\n" + "4.Division\n" + "Enter operation number:"); 
      int n1 = scan.nextInt(); 
      scan.nextLine(); 

      switch (n1) { 
       case 1: 
        op.add(); 
        break; 
       case 2: 
        op.diff(); 
        break; 
       case 3: 
        op.prod(); 
        break; 
       case 4: 
        op.quo(); 
        break; 
       default: 
        System.out.println("Invalid input"); 
        break; 
      } 

      System.out.println("Try again? [Y/N]"); 
      ans = scan.nextLine().charAt(0); 

     } while (ans == 'Y' || ans == 'y'); 
    } 

} 

et NetBeans puis a cette correction automatique qui a abouti à ceci:

package calc; 

import java.util.Scanner; 

public class Calc { 

    private static char ans; 

il a ajouté un "char statique privée ans;" et je voudrais comprendre plus comment cela a-t-il corrigé mon code. Merci

+3

Si vous déclarez 'ans' l'intérieur de votre boucle do-while, vous ne pouvez pas l'utiliser dans la condition de l » 'de while', il est hors de portée. – Berger

+0

Une meilleure solution serait de supprimer le champ 'static' et de déclarer à la place le varible local à la méthode' main': 'char ans'. –

+0

déclare 'char ans = 0;' avant de faire alors –

Répondre

1

ans est défini dans la boucle do{ ... } while() mais il doit être défini à l'extérieur, pour le rendre disponible pour condition dans le while.

Alors faire:

char ans = 0; 
do { 
    Calc op = new Calc(); 
    Scanner scan = new Scanner(System.in); 
    ans = 0; 
+1

Haha vient de le réaliser merci. –