【问题标题】:pass data by user to another class用户将数据传递给另一个类
【发布时间】:2021-06-11 08:21:03
【问题描述】:

我尝试将学生姓名从主班传递给学生班,但在运行时出现错误。

主类是

 public static void main(String[] args) {
              Students students =new Students ();
              Scanner in = new Scanner (System.in);
              String [] name = new String [5];
              for (int i =0; i <=4; i++){
              System.out.print("Enter student name " + (i+1) + " : ");
                       name [i]= in.next();  
              }
              students.SetData(name);
              students.GetData();

     }// Main

学生班级是

public class Students {
    private String Names [] = new String [5]; 
    
    public void SetData (String [] Names){
              for (int i=0 ; i <= Names.length; i++){
                       this.Names [i] = Names[i] ; //HERE is my error
              } //for 
    } //SetData method
    
    public void  GetData (){
              for (int i=0 ; i <= Names.length; i++){
                       System.out.println("Name of student " + (i+1) + " is " +Names[i]);
              } //for
    } //GetData mehtod 
} //Students Class

另外我怎样才能让我的程序检查用户是否输入了字符串?

谢谢大家

【问题讨论】:

  • 你遇到了什么错误?
  • 检查用户是否输入了STRING...”到底是什么意思?最终,所有输入都是字符串
  • 使用if (name.matches("^[a-zA-Z]*$")) 。根据需要更改正则表达式。

标签: java arrays class netbeans


【解决方案1】:

你应该写 i &lt; Names.length 在您的循环中,因此它们会提前一步终止。

Names.length == 5比最后一个有效索引大一。

吹毛求疵: 您不应该以大写字母开头变量,它们是为类名保留的。在 [] 数组运算符之前使用空格也看起来很奇怪。

【讨论】:

    【解决方案2】:

    另外我怎样才能让我的程序检查用户是否输入了字符串?

    使用正则表达式验证用户输入:

    public static void main(String[] args) {
        isValidName("John  Doe");
        isValidName("John1 Doe");
    }   
    
    public static boolean isValidName(String name){
        boolean isValid = name.matches("[a-zA-Z]*\s*[a-zA-Z]*$");
        if(isValid) {
            System.out.println(name + " is a valid name");
        } else {
            System.out.println(name + " is not a valid name");
        }
        return isValid;
    }
    

    输出:

    John  Doe is a valid name
    John1 Doe is not a valid name
    

    将模式[a-zA-Z]*\s*[a-zA-Z]*$ 更改为 per 您的需要。 更多信息请参考:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

    【讨论】:

    • 如果您不喜欢编辑,请随时回滚
    【解决方案3】:

    要接受 dynamic no of name 条目,请使用 ArrayList 而不是 array of string验证 name 作为字符串使用带有正则表达式的模式匹配功能。

    class  TestMain {
        public static void main(String[] args) {
    
            Students students =new Students ();
            Scanner scanner = new Scanner (System.in);
            List<String> names = new ArrayList<String>();
            String input = new String();
            do{
                System.out.print("Enter student name or 'e' to exit : ");
                input = scanner.next();
                if(isValidName(input) && (!input.equals("e"))){
                    names.add(input);
                }
            }while(!input.equals("e"));
    
            students.SetData(names);
            students.GetData();
            
        }
    
        public static boolean isValidName(String name){
            String regExp = "[a-zA-Z]*\\s*[a-zA-Z]*$";
            boolean isValid = name.matches(regExp);
            System.out.println("isValid :" + isValid);
            return isValid;
        }
    
    }
    
    class Students {
    
        private String names [];
        
        public void SetData (List<String> names){
             this.names = names.toArray(new String[0]);
        }
        
        public void  GetData (){
            for (int i=0 ; i < names.length; i++){
                System.out.println("Name of student " + (i+1) + " is " +names[i]);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      相关资源
      最近更新 更多