Вот мой код:Как я могу избавиться от «статического»?
public class Main extends JFrame{
static int NoOfUsers;
static String[][] Accounts = new String[NoOfUsers][2];
public static void main(String[] args){
Login();
}
private static void Login() {
final String FileName = "F:/TextFiles/loginaccs.txt";
try {
BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(FileName)));
int NoOfUsersL = Integer.parseInt(file.readLine());
String[][] Accounts = new String[NoOfUsersL][2];
NoOfUsers = NoOfUsersL;
for (int i=0; i<NoOfUsersL; i++) {
Accounts[i][0] = file.readLine();
Accounts[i][1] = file.readLine();
}
for (int i=0; i<NoOfUsersL; i++) {
System.out.println(Accounts[i][0]);
System.out.println(Accounts[i][1]);
}
file.close();
} catch (IOException e) {
System.out.println("ERROR: unable to read file.");
e.printStackTrace();
}
String username = null;
String password = null;
JTextField usernamejtf = new JTextField(username);
JPasswordField passwordjtf = new JPasswordField(password);
String[] buttons = {"Login", "Create new account"};
Object[] InputDialog = {
"Username: ", usernamejtf, "Password: ", passwordjtf
};
do {
int option = JOptionPane.showOptionDialog(null,
InputDialog,
"Login",
JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,
buttons,
buttons[0]);
System.out.println(option); //Check
if (option == JOptionPane.CLOSED_OPTION) {
return;
}
else if (option == 0) {
if (CheckAccount(username,password)) {
System.out.println("Logged in");
} else {
System.out.println("Wrong Password/Username");
}
} else if (option == 1) {
System.out.println("Create Account.");
}
} while (!(CheckAccount(username,password)));
}
private static boolean CheckAccount(String username, String password) {
for (int i=0; i>NoOfUsers; i++) {
if ((username == Accounts[i][0]) && (password == Accounts[i][1])) {
return true;
}
}
return false;
}
}
В «основной», я назвал метод Логин(), и Eclipse, заставляет меня поставить слово «статический» перед именем метода ,
В любом случае, я могу изменить программу так, чтобы ее можно было написать как: private void Login() {...}; private boolean CheckAccount (...) {...} и т. Д.?
[Дополнительный вопрос: Из-за слова «статический» я не могу поставить что-то вроде слова «public» перед String [] [] Учетные записи = новая строка [NoOfUsersL] [2];
С помощью CheckAccount доступ к массиву учетных записей невозможен. Как я могу изменить программу, чтобы исправить эту проблему.]
Thx каждый заранее.
Вам необходимо создать экземпляр 'Main', чтобы использовать методы в качестве методов экземпляра. –
Это заставляет вас использовать 'static', потому что нестатические методы принадлежат' instance', а не 'class'. Вам нужно создать экземпляр 'Main'. –
Ответ на дополнительный вопрос: Да, вы можете. Статические переменные также известны как переменные класса. Локальные переменные не могут быть объявлены статическими. – thanga