Reputation: 315
I have tried various suggestions already given on the website.. But honestly i couldnt find something to fix it.
Basically when i try to use any variable created in Accept... it cant be used in other functions. Is there a simple solution to fix this? (Without changing the main code)
import java.util.Scanner;
class x4Salary
{
Scanner input = new Scanner(System.in);
public void accept()
{
System.out.println("Please input the name of the teacher");
String name = input.next();
System.out.println("Please input the address ");
String adress = input.next();
System.out.println("Please input the phone number");
long num = input.nextLong();
System.out.println("Please input the subject specialization");
String subjectSpecialization = input.next();
String subS = subjectSpecialization;
System.out.println("Please input the Monthly Salary");
long sal = input.nextLong();
if(sal>175000)
{
tax();
}
display();
double tax = 0.0;
}
public void tax()
{
System.out.println("Your current salary is : " + sal);
tax = sal + ((5/sal)*100);
System.out.println("The salary + Tax : " +tax);
display();
}
public void display()
{
System.out.println("The name of the teacher : " + name);
System.out.println("The Address of the teacher :" +adress);
System.out.println("The Phone number of the Teacher: "+num);
System.out.println("The Subject Specialization of the Teacher" + subS);
System.out.println("The Monthly salary of the teacher" +sal + tax);
}
}
Upvotes: 1
Views: 142
Reputation: 213331
You would need to make those variables as instance
variables.
The variables created in a method, in confined to that method scope only. It is not visible outside that method. It will be created when the method is invoked, and then when the method is finished with execution, that variable becomes eligible for Garbage Collection
.
This is true for any block scope you have. The variables created in one block, will not be visible outside that block.
For e.g: -
{ // A block
int num = 10;
}
System.out.println(num); // Error. num not visible here.
So, to access the variable in all methods, declare it as: -
public class Demo {
private int num; // Instance variable declaration. Outside every method.
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return this.num;
}
}
So, as you can see, variable num
is used in both the methods: - setNum
and getNum
.
Go to this tutorial to get started with classes
, objects
, and member declarations
: -
Upvotes: 1
Reputation: 190
Define your variables as Member Variables in the Class then it can be accessible in all the member methods.
import java.util.Scanner;
class x4Salary
{
private double tax=0.0;
private string name, adress, subS;
private long num, sal;
Scanner input = new Scanner(System.in);
public void accept()
{
System.out.println("Please input the name of the teacher");
name = input.next();
System.out.println("Please input the address ");
adress = input.next();
System.out.println("Please input the phone number");
num = input.nextLong();
System.out.println("Please input the subject specialization");
subS = input.next();
System.out.println("Please input the Monthly Salary");
sal = input.nextLong();
if(sal>175000)
{
tax();
}
display();
}
public void tax()
{
System.out.println("Your current salary is : " + sal);
tax = sal + ((5/sal)*100);
System.out.println("The salary + Tax : " +tax);
display();
}
public void display()
{
System.out.println("The name of the teacher : " + name);
System.out.println("The Address of the teacher :" +adress);
System.out.println("The Phone number of the Teacher: "+num);
System.out.println("The Subject Specialization of the Teacher" + subS);
System.out.println("The Monthly salary of the teacher" +sal + tax);
}
}
Upvotes: 1
Reputation: 46428
you cant use the local variables(variables defined inside your method) outside of that method. they are only confined to that method. you either have to make it an instance variable or return that variable so that the other methods can use it. in your case. if you want to use sal outside method accept . make it an instance variable.
Class classname {
public long sal;
public void accept(){
//can access sal here
sal = input.nextLong();
}
public void display(){
//cvan access sal here
}
}
Upvotes: 1
Reputation: 272347
Those variables are scoped to the method alone. If you want to retain those values entered your options are:
For option 2 you could define a return object thus:
class Teacher {
private String name;
private String phone;
// add appropriate constructor
}
I suspect Teacher
is a key object in your application and you would likely want to add the method display()
to the Teacher class itself. Remember that OO is about creating objects and getting them to do things for you, not handling discrete related variables yourself.
Upvotes: 1
Reputation: 9579
You can make those variables as class members
class x4Salary
{
protected String name, address; //and so on
and then instead of String name = input.next();
name = input.next();
name would be visible in all methods of X4Salary
Upvotes: 3