#java #string #methods
#Ява #строка #методы
Вопрос:
Этот пункт этой программы заключается в том, чтобы ограничить длину символов имени пользователя 20 символами. Это одна из частей более крупной программы, которая в настоящее время содержит только основной метод. В интересах очистки и уточнения моего кода я хотел бы разделить различные функции на отдельные методы.
В настоящее время я пытаюсь установить переменные класса так, чтобы их можно было использовать в нескольких методах. Это то, что у меня есть до сих пор:
public class Program { Scanner read = new Scanner(System.in); String firstName = read.nextLine(); String lastName = read.nextLine(); public void main(String[] args) { domainCharLimit(); } public void domainCharLimit() { String firstNameNew = firstName.replace("'", ""); String lastNameNew = lastName.replace("'", ""); String domainUsername = firstNameNew "." lastNameNew; if (domainUsername.length()gt;20) { String cutName = domainUsername.substring(0, 20); domainUsername = cutName; } System.out.print(domainUsername); } }
Я попытался установить один или оба метода в статическое состояние, что не решило проблему. В этом состоянии при запуске программа не возвращает ошибку, а скорее выдает «нет вывода».
Ответ №1:
Основной метод должен быть статическим! Это запись в вашу программу, и ее подпись должна быть такой.
Чтобы вызвать нестатический метод внутри него, вам нужно создать экземпляр объекта и вызвать его на этом объекте. В вашем случае что-то вроде
public static void main(String[] args) { Program p = new Program(); p.domainCharLimit(); }
Ответ №2:
Во-первых: Основной метод всегда должен быть статичным.
Во-вторых: поскольку вы звоните domainChatLimit()
из Main(static)
другого места, оно также должно быть статичным
Третье: Поскольку вы использовали firstName
lastName
атрибуты в статическом методе domainChatLimit()
, они также должны быть статическими
Четвертое: Scanner
должно быть также статичным , потому что вы используете его для получения firstName
, lastName
и они оба статичны.
ПРИМЕЧАНИЕ: Нет необходимости определять новый экземпляр этого класса для вызова внутреннего метода
Решение должно быть таким, как показано ниже (успешно протестировано):
import java.util.Scanner; public class Program{ // variables below should be defined as static because they are used in static method static Scanner read = new Scanner(System.in); static String firstName = read.nextLine(); static String lastName = read.nextLine(); // Main method is static public static void main(String[] args) { //There is no need to define a new instance of this class to call an internal method domainCharLimit(); } // calling from main static method so it should be static public static void domainCharLimit() { String firstNameNew = firstName.replace("'", ""); String lastNameNew = lastName.replace("'", ""); String domainUsername = firstNameNew "." lastNameNew; if (domainUsername.length()gt;20) { String cutName = domainUsername.substring(0, 20); domainUsername = cutName; } System.out.print(domainUsername); } }
если вы хотите создать универсальный интерфейс для этой функции, вы можете выполнить следующую логику:
PogramUtil.java import java.util.Scanner; public class ProgramUtil { Scanner read = new Scanner(System.in); String firstName = read.nextLine(); String lastName = read.nextLine(); public void domainCharLimit() { String firstNameNew = firstName.replace("'", ""); String lastNameNew = lastName.replace("'", ""); String domainUsername = firstNameNew "." lastNameNew; if (domainUsername.length()gt;20) { String cutName = domainUsername.substring(0, 20); domainUsername = cutName; } System.out.print(domainUsername); } }
теперь вы можете позвонить таким образом :
Program.java public class Program{ // Main method is static public static void main(String[] args) { ProgramUtil programUtil = new ProgramUtil(); programUtil.domainCharLimit(); } }
Комментарии:
1. Примечание .создание постоянной статики означает, что ваши переменные будут одиночными, а методы будут находиться на уровне vlass, а не на уровне объектов (для каждого приложения может существовать только одна вещь, и она будет находиться в памяти до тех пор, пока приложение работает). Если вы используете этот подход, вы, вероятно, столкнетесь с проблемами при повторном использовании этих функций. Делать все статичным-плохая практика, развязывать ее необходимо
2. с точки зрения подхода к проектированию этот вопрос требует основного метода. как вы думаете , вы будете повторно использовать эту функцию:
domainCharLimit
и эти переменные:firstName
,lastName
в другом месте вашего приложения? если ответ «да», я бы перенес этот метод в отдельный класс Util , который можно использовать повторно3. Это так, сейчас я пытаюсь повторно использовать
firstName
lastName
переменные и в другом месте и получаю при этом значение null. Я также пытаюсь вывести переменную domainUsername из другого метода, и она выводит значение null. Я новичок в Java и в следующий раз рассмотрю отдельные классы Util-Спасибо!4. Я обновил сообщение, чтобы показать лучшее решение для использования. если у вас есть общие функциональные возможности в Java, вам лучше создать методы Util, которые можно вызывать из 1 класса util. каждый класс util должен всегда находиться в пределах одного и того же объема работы