大家帮忙看下代码哪里有问题

问题描述

packagecstring;/****@authorAdministrator*/importjava.io.*;publicclassPrac7{publicstaticvoidmain(String[]args){readDigits();}publicstaticvoidreadDigits(){InputStreamReaderinput=newInputStreamReader(System.in);BufferedReaderkeyboard=newBufferedReader(input);System.out.print("PleaseenteraString:");try{Stringc=keyboard.readLine();booleanflag=false;flag=isAsDigits(c);if(flag!=false)System.out.println("fail");}catch(Exceptione){e.printStackTrace();}}publicstaticbooleanisAsDigits(Stringstr){booleanhasDigit=false;booleanisDigit=false;if(str.length()==0){System.out.println("Thisisanemptystring.");readDigits();}else{intindex=0;StringfirstElement=str.substring(index,index+1);String[]integer={"1","2","3","4","5","6","7","8","9","0"};for(inti=0;i<integer.length;i++){if(firstElement.equals(integer[i]))hasDigit=true;}if(hasDigit==true){isDigit=true;}else{if(str.length()>1){StringnewString=str.substring(index+1,str.length());System.out.print(firstElement);isAsDigits(newString);}elseif(str.length()==1){System.out.print(firstElement);isDigit=false;}}}returnisDigit;}}要求是用递归编写一个读取string类型数据的程序,如果该数据中出现了数字,就报fail我上面编写好的如果开始输入数字没问题run:PleaseenteraString:12fail成功生成(总时间:2秒)但是如果先输入字母再输入数字就不对了run:PleaseenteraString:as12as成功生成(总时间:2秒)

解决方案

解决方案二:
后面递归判断的boolean值回传没有记录
解决方案三:
这么简单一个程序被写成这么复杂?
解决方案四:
看看你的递归函数,是不是每次都有正确的返回值
解决方案五:
如果你不想多改的话if(str.length()>1){StringnewString=str.substring(index+1,str.length());System.out.print(firstElement);isAsDigits(newString);}

改成if(str.length()>1){StringnewString=str.substring(index+1,str.length());System.out.print(firstElement);isDigit=isAsDigits(newString);}

解决方案六:
/****@authorAdministrator*/importjava.io.*;publicclassPrac7{Stringstr;publicstaticvoidmain(String[]args){newPrac7().readDigits();}publicvoidreadDigits(){InputStreamReaderinput=newInputStreamReader(System.in);BufferedReaderkeyboard=newBufferedReader(input);System.out.print("PleaseenteraString:");try{Stringc=keyboard.readLine();booleanflag=false;flag=isAsDigits(c);if(flag!=false)System.out.println("fail");elseSystem.out.println(str);}catch(Exceptione){e.printStackTrace();}}publicbooleanisAsDigits(Stringstr){this.str=str;for(inti=0;i<str.length();i++){if((int)str.charAt(i)>=48&&(int)str.charAt(i)<=57){returntrue;}}returnfalse;}}

其实这样就可以了。正则表达式的话更快
解决方案七:
引用楼主llwforever91的回复:

Stringc=keyboard.readLine();booleanflag=false;flag=isAsDigits(c);if(flag!=false)System.out.println("fail");}

输入12后,flag的值为true;而输入as12后,flag的值为false,所以会出现那个结果。只要把if(flag!=false)改为if(flag==false)应该就没问题了!
解决方案八:
引用4楼bxftyt的回复:

如果你不想多改的话Javacodeif(str.length()>1){StringnewString=str.substring(index+1,str.length());System.out.print(firstElement);isAsDigits(newString);}改成……

这道递归题小猫咪提供的这种方法是可以的,也是很标准的传回递归值的方法,另外的话还可以将booleanhasDigit=false;booleanisDigit=false;这两个方法中的变量提到方法外,成为全局变量:staticbooleanhasDigit=false;staticbooleanisDigit=false;这样也是可以的

时间: 2024-10-25 15:16:42

大家帮忙看下代码哪里有问题的相关文章

jsp-求教:哪位大神帮忙看下代码,本人小白,实在不知道哪里有问题!!

问题描述 求教:哪位大神帮忙看下代码,本人小白,实在不知道哪里有问题!! 代码如下,登陆页面,把java逻辑放到了后台页面上,运行的时候没有报错,但是不跳转.测试账号密码正确不跳转因为没写,但是测试账号密码错误的情况下也不跳转. <%@ page language=""java"" import=""java.util.*java.sql.*info.DataBase"" pageEncoding=""

帮忙看下代码,提示错误:赋值 -- 它是只读的 代码哪里错了?

问题描述 帮忙看下代码,提示错误:赋值--它是只读的代码哪里错了?publicstringgetFileName{get{getFileName="";try{if(((Request==null)==false)){stringwk=Request.Url.LocalPath.ToString();intpos=wk.LastIndexOf("/");if((pos!=-1)){wk=wk.Substring(pos+1);}returngetFileName=w

编程-跪求大神帮忙看下代码,错了不晓得怎么改哦

问题描述 跪求大神帮忙看下代码,错了不晓得怎么改哦 switch (uMsg) { case WM_CHAR: char szChar[20]; sprintf(_T(szChar),_T( "char code is %d"), wParam); 错误 1 error C2065: "LszChar": 未声明的标识符 IntelliSense: "const wchar_t *" 类型的实参与 "const char *"

textview-android无法显示地理位置信息,求帮忙看下代码

问题描述 android无法显示地理位置信息,求帮忙看下代码 package com.example.locationtest; import java.util.List; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.L

为什么我拖拽后的控件回不去!!帮忙看下代码是什么问题!!谢谢

问题描述 为什么我拖拽后的控件回不去!!帮忙看下代码是什么问题!!谢谢 这是JAVA代码 package com.example.test; import com.example.test1.R; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; i

ie8下 全选功能报错-ie8下 JS全选功能报错 求达人帮忙看下代码

问题描述 ie8下 JS全选功能报错 求达人帮忙看下代码 // ???? function autoCalDaysNm() { for(var j=1; j<=29; ++j) { var el = $("#writeForm input[name=atdDay" + j + "]"); var d = Date.parse("2016/02/" + el.val()); if (d) { var t = d.toString("

java大神帮忙看下代码越界问题

问题描述 java大神帮忙看下代码越界问题 package com.net.ch02; public class Split { public void func(String str,String s){ String Str = s+str+s; String[]array = new String[100]; int[]ray = new int[100]; for(int i = 1 ; i<=Str.length();i++ ){array[i-1] = Str.substring(i

c++-帮忙看下代码,运行不了了,哪里有问题麻烦指出来下谢谢~!麻烦修改下 谢谢!

问题描述 帮忙看下代码,运行不了了,哪里有问题麻烦指出来下谢谢~!麻烦修改下 谢谢! #include #include using namespace std; int min(int n, int m); int max(int n, int m); const int N = 50; void Read_Store(int Number[N], int &length); void Add_Output(); int main() { cout<<" This is a

有会js的么,可以帮忙看下代码哪里有问题么

问题描述 有会js的么,可以帮忙看下代码哪里有问题么我想做一个将数据库一条记录删除,在每条记录前都会动态生成一个checkbox选项,勾选后可以将其删除,可是现在貌似itemcd的值一直都没有传过来,不知道是怎么回事<scripttype="text/javascript">functiongetBox(){varcd="";varcount=0;varids=document.getElementsByName("user.itemcd&qu

麻烦各位帮忙看下代码,看是什么原因导致程序出现问题

问题描述 privatevoidbutton1_Click(objectsender,EventArgse){try{if(mywatcher==null){SQLHelp.IniWriteValue("INI","localpath",this.textBox1.Text,System.Windows.Forms.Application.StartupPath+"\CONFIG.INI");SQLHelp.IniWriteValue("