当前位置: 代码迷 >> J2SE >> 为何程序正常编译运行,而结果出错呢
  详细解决方案

为何程序正常编译运行,而结果出错呢

热度:126   发布时间:2016-04-23 19:41:23.0
为啥程序正常编译运行,而结果出错呢?
/*
面向对象模拟项目——游戏软件:智能女友
@anthor  zhy  0902Java基础班
@version 1.0
注意定义对象类时,不要定义成内部类,否则会出现:
错误: 无法从静态上下文中引用非静态 变量 this
如:GirlFriend_Demo gf = new GirlFriend_Demo(name,age);
*/
import java.util.*;
public class AI_GirlFriend{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
   System.out.println("请你输入要创建女友的输入姓名:");
   String name = sc.next(); 
   while(true){
   if(name == "[\u4e00-\u9fa5]"){ //中文正则表达式
 break ;
   }else{
   System.out.println("非法数据,您输入的不是汉字,请重新输入");
   name = sc.next();
}
   }
   System.out.println("请你要创建女友的输入年龄:");
   int age = sc.nextInt();
   while(true){
   if(age >25|| age<=14){ //判断年龄合法性
 System.out.println("非法数据,请重新输入");
 age = sc.nextInt();
   }else{
   break;
}
   }
    GirlFriend_Demo gf = new GirlFriend_Demo(name,age);
  
 System.out.println("你想要的智能女友资料如下:\n姓名:"+gf.getName()+"\n年龄:"+gf.getAge()+"岁\n"+"性别:"+GirlFriend_Demo.sex);
 //gf.paPaPa();
//gf.chat();
for(;;){
System.out.print("确认请按回车键:");
String temp = sc.next();
if (temp=="\n")
{
break;
}else{
System.out.println("键入有误,请重新输入");
}
}


 sc.close();


}

class GirlFriend_Demo{
private String name;
private int age;
static char sex = '女';
public GirlFriend_Demo(String name,int age){
 this.name = name;
 this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void paPaPa(){
System.out.println("papapa");
}
public void chat(){
System.out.println("我想我可以跟你聊天");
}
}

输入中文不论一个字还是多个字都报输入错误,不应该啊。我设置的正则表达式是从网上差的。可是为啥通不过呢?

------解决思路----------------------
正则表达式是利用==测试满足表达式吗?
------解决思路----------------------
String ==另一个String肯定是不可以的
------解决思路----------------------
用.equals()?
------解决思路----------------------
正则表达式不是这么用的。
判断条件改成Pattern.compile(正则表达式).matches(带匹配字符串)
而且Java正则表达式里的\要写成\\
------解决思路----------------------

你想表达的是name属于后面那个吧?
举例: 1==(1-100)?
      54==(1-100)
逻辑上肯定是不通的。

String name = sc.next();
char[] arr=name.toCharArray();
for(int x=0;x<arr.length;x++){
if((arr[x]>= 0x0391 &&arr[x]<= 0xFFE5)){}
我也是新手 只想到可以一个一个的校验
------解决思路----------------------
今天中午想了一下  晚上回来实践了一遍
import java.util.*;
public class AI{
     public static void main(String[] args){
         Scanner sc = new Scanner(System.in);
        boolean flag=true;

while(flag){ System.out.println("请你输入要创建女友的输入姓名:");
String name = sc.next();
char[] arr=name.toCharArray();
for(int x=0;x<arr.length;x++){
if(!(arr[x]>= 0x0391 &&arr[x]<= 0xFFE5)){
flag=false;
break;

}

}
if(flag){
break;
}
else{System.out.println("非法数据,您输入的不是汉字,请重新输入");
flag=true;}
}
     
       
        }

}
------解决思路----------------------
正则判断,直接用==不行吧
------解决思路----------------------
String regex = "[\u4e00-\u9fa5]";
match(regex, name);
------解决思路----------------------
 if(name == "[\u4e00-\u9fa5]")你这是匹配字符串的地址去了,什么时候都是错误的。除非你这样
String name =  "[\u4e00-\u9fa5]";
------解决思路----------------------
    public void test2() {
        // 中文内容也匹配
        String pstr = "\"([^\"
------解决思路----------------------
[\u4e00-\u9fa5]]+)\"";
        Pattern p = Pattern.compile(pstr);
        Matcher m = p.matcher("\"goodjob里面有中文呢\"");
        System.out.println(m.find() ? m.group(1) : "nothing");
    }
  相关解决方案