Как я могу использовать строку пользовательского ввода из одного метода в другом?

#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 должен всегда находиться в пределах одного и того же объема работы