2016-06-19 2 views
-1

У меня есть этот класс (с сеттерами, геттерами и одним методом), который запрашивает у пользователя число неопределенно, пока он не наберет -1. Я вызвал метод сканера как из основного метода, так и из самого класса, есть способ вызвать метод сканирования только один раз только из основного метода и применять вход к классу каждый раз, когда это необходимо? Я действительно ценю твою помощь. Если что-то неясно, свяжитесь со мной.Используйте сканер только по основному методу

Вот код класса:

public class calculation { 

int current = 0; 
int maxNum = 0; 
int minNum; 
int counter=0; 
float sum = 0; 
float avg; 

Scanner scan = new Scanner(System.in); 


public void setMin(int min){ 
    this.minNum = min; 
} 

public int getMin(){ 
    return minNum; 
} 

public void setMax(int max){ 
    this.maxNum = max; 
} 

public void setSum(float sum){ 
    this.sum += sum; 
} 

public void minMax(int current){ 
    setMin(current); 
    while(current!=-1){ 
     setSum(current);; 
     if(current>getMin()){ 
      setMax(current); 
     }else if(current<getMin()){ 
      setMin(current);; 
     } 

     current = scan.nextInt(); 

     counter++; 
    } 

    System.out.println("The smallest number you entered was: \n" + minNum); 
    System.out.println("The biggest number you entered was: \n" + maxNum); 
    System.out.println("The sum of all those numbers is: \n" + sum); 
    System.out.println("The avarege number is: \n" + (sum/counter)); 

} 

} 

А вот основной код метода:

public class minusOne { 

public static void main(String[] args) { 

    Scanner scan = new Scanner(System.in); 

    calculation cal1 = new calculation(); 

    System.out.println("Type numbers at will, when finish, type -1 and press enter"); 
    cal1.minMax(scan.nextInt()); 

    scan.close(); 

} 

} 
+1

* Я назвал метод сканера как из основного метода, так и из самого класса *: нет, вы этого не сделали. Поле сканирования в расчете никогда не используется нигде. –

ответ

0

Из того, что я понимаю, вы не хотите иметь два вызова new Scanner(System.in);

Чтобы этого избежать, вы можете просто, в своем классе, написать: Scanner scan;

И добавить конструктор:

public calculation(Scanner sc){ 
    scan = sc; 
} 

Конечно, в основном методе вы должны написать: new calculation(scan)

Я надеюсь, что я ответил на ваш вопрос

Примечание: в Java Ваше имя класса должно начните с буквы верхнего регистра, это должно быть Calculation

+0

Благодарим за помощь! –

0

У вас есть несколько альтернатив для этого, вы можете иметь свой класс калькулятора с переменным током onstructor, который берет Сканер в качестве параметра, а затем сохраняет его в поле или у вас есть общедоступное поле в классе Calculator, а в основном, когда вы получаете сканер, просто влияют на это поле (но он должен быть закрытым, вы можете изменить это с помощью методов getters и seters).

/* This is the first option*/ 
public class Calculation { 

    int current = 0; 
    int maxNum = 0; 
    int minNum; 
    int counter=0; 
    float sum = 0; 
    float avg; 

private Scanner scan; 

public Calculation(Scanner scan){ 
    this.scan = scan; 
} 
public int setCurrent(int current){ 
    this.current = current; 
    return current; 
} 

public void setMin(int min){ 
    this.minNum = min; 
} 

public int getMin(){ 
    return minNum; 
} 

public void setMax(int max){ 
    this.maxNum = max; 
} 

public void setSum(float sum){ 
    this.sum += sum; 
} 

public void minMax(int current){ 
    setMin(current); 
    while(current!=-1){ 
     setSum(current);; 
     if(current>getMin()){ 
      setMax(current); 
     }else if(current<getMin()){ 
      setMin(current);; 
     } 

    current = setCurrent(current);; 

    counter++; 
    } 
    System.out.println("The smallest number you entered was: \n" + minNum); 
    System.out.println("The biggest number you entered was: \n" + maxNum); 
    System.out.println("The sum of all those numbers is: \n" + sum); 
    System.out.println("The avarege number is: \n" + (sum/counter)); 

    } 
} 

/* Second option */ 
    public static void main(String[] args) { 

    Scanner scan = new Scanner(System.in); 


    calculation cal1 = new calculation(); 
    //if the field scan in Calculation is public 
    cal1.scan = scan; 
    //if it is private 
    cal1.setScan(scan); 
    System.out.println("Type numbers at will, when finish, type -1 and press enter"); 
    cal1.minMax(scan.nextInt()); 

    scan.close(); 

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