Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法声明_Java_Methods - Fatal编程技术网

Java 方法声明

Java 方法声明,java,methods,Java,Methods,我已经很久没有编程了,这是我第一次在程序中声明一个方法并在程序中使用这个方法。简单地说,程序让用户输入一个5位的zipcode,我创建的方法检查zipcode是否只有5个字符,是否都是数字。当我在程序中使用该方法时,无论我为zipcode输入什么,while语句都会运行,要求我再次输入zipcode。只有当您输入的字符串不是五个字符或字符串只有数字时,才会发生这种情况。然而,现在即使输入了一个实际的zipcode,它也在发生,这让我不得不假设这个方法出了问题。我试图尽可能清楚地回答这个问题,但如

我已经很久没有编程了,这是我第一次在程序中声明一个方法并在程序中使用这个方法。简单地说,程序让用户输入一个5位的zipcode,我创建的方法检查zipcode是否只有5个字符,是否都是数字。当我在程序中使用该方法时,无论我为zipcode输入什么,while语句都会运行,要求我再次输入zipcode。只有当您输入的字符串不是五个字符或字符串只有数字时,才会发生这种情况。然而,现在即使输入了一个实际的zipcode,它也在发生,这让我不得不假设这个方法出了问题。我试图尽可能清楚地回答这个问题,但如果需要进一步澄清,我可以尝试澄清,如果您能提供任何信息,我将不胜感激。这是我的密码:

import java.util.Scanner;

public class BarCode {
    public static void main(String[] args) {

        String zipcode;

        Scanner in = new Scanner(System.in);
        System.out.println("Please enter a 5 digit zipcode: ");
        zipcode = in.nextLine();

        while (checkInput(zipcode) == false) {
            System.out.println("You did not enter a 5 digit zipcode: ");
            zipcode = in.nextLine();
        } // end while

    } // ends main

    public static boolean checkInput(String zipcode) {
        boolean zipcodeLength = true;
        boolean zipcodeDigits = true;
        if (zipcode.length() != 5) {
            zipcodeLength = false;
        } // end if statement
        for (int i = 0; i <= zipcode.length(); i++) {
            if (!Character.isDigit(i)) {
                zipcodeDigits = false;
            } // end if statement
        } // end for statement
        if (zipcodeLength == false || zipcodeDigits == false) {
            return false;
        } // end if statement
        else {
            return true;
        } // end else statement
    } // end checkInput
}

这就是你的问题:

if(!Character.isDigit(i))
应该是

if(!Character.isDigit(zipcode.charAt(i)))

您不需要将布尔值false存储在某个布尔变量中。只要在发现zipcode无效时返回即可

你应该这样做:

!Character.isDigit(zipcode.charAt(i))
代替:-

!Character.isDigit(i)
因此,您可以这样修改您的方法:-

public static boolean checkInput(String zipcode){

  if (zipcode.length() != 5){
    return false;
  } 

  for ( int i = 0; i < zipcode.length(); i++){
    if(!Character.isDigit(zipcode.charAt(i))){
      return false;
    } 
  } 

  return true;
}
此外,您不需要执行:-booleanVar==false。只要做:-!booleanVar够了

 public static boolean checkInput(String zipcode){
      if (zipcode.length() != 5){
        return false;
      } 
      for ( int i=0; i<zipcode.length();i++){
char charAt = zipcode.charAt(i);
        if(!Character.isDigit(charAt)){
          return false;
        } 
      } 
     return true;
    } 

您需要使用charAt,而不是查看我是否是一个数字,因为显然它是一个数字。

有两个问题

import java.util.Scanner;

public class BarCode{ public static void main(String[] args){

    String zipcode;
    Scanner in = new Scanner(System.in);
    System.out.println("Please enter a 5 digit zipcode: ");
    zipcode = in.nextLine();
    while (checkInput(zipcode)==false){
        System.out.println("You did not enter a 5 digit zipcode: ");
        zipcode = in.nextLine();
    }
}


public static boolean checkInput(String zipcode){
    boolean zipcodeLength = true;
    boolean zipcodeDigits = true;
    if (zipcode.length() != 5){
        zipcodeLength = false;
    } // end if statement
    for (int i=0; i<zipcode.length();i++){
        if(!Character.isDigit(zipcode.charAt(i))){
            zipcodeDigits = false;
        }
    }
    return zipcodeLength && zipcodeDigits;
    } // end checkInput
}
首先是你要去 我觉得这是个错误。i为int型:

您将获得以下输出:

= char '1' =
true
= int 1 =
false
= Unicode 31h (49) =
true
= int 49 =
true

仅供参考,你的整个checkInput可以被zipcode.matches\\d{5}替换,代码更少,麻烦更少。你需要学习如何自己调试这些简单的问题。即使没有调试器,您也可以插入System.out.println调用,以了解代码中发生了什么。@HotLicks+1对于初学者和专家来说都是一项重要技能。如果!数字字符{zipcodeDigits=false;这部分似乎有问题。返回一个编译错误,说字符不是为int类型定义的。我感谢您帮助我自己学习Java,并且没有人坐下来帮助我。@user1701604也会更改I@user1701604您越早学会掌握ctrl空格越好。我希望您是使用IDE在Java中编码!当我这样做时,当我输入zipcode@user1701604试试看。我忘了删除这个好答案,真的。与问题下面的第一条评论完全相同,没有任何澄清。更不用说OP是来调试他的代码的。我不知道,但我简历他/她是一个人。OP=公共论坛上使用的原始海报术语;on SO表示问题的所有者。
public static boolean checkInput(String zipcode){
     if(zipcode.length() != 5) return false; // bad length
     for(int i = 0; i < zipcode.length(); i++) {
         if(!Character.isDigit(zipcode.charAt(i)) // bad digit
             return false;
     }
     return true; // if no bad condition, it's good
}
  while (zipcode.matches("[0-9]{5}"))==false){
    System.out.println("You did not enter a 5 digit zipcode: ");
      zipcode = in.nextLine();
  } 
!Character.isDigit(i)
for (int i = 0; i <= zipcode.length(); i++) {
// ...
}
System.out.println("= char '1' =");
System.out.println(Character.isDigit('1')); // true

System.out.println("= int 1 =");
System.out.println(Character.isDigit(1)); // false

System.out.println("= Unicode 31h (49) =");
System.out.println(Character.isDigit('\u0031')); // true

System.out.println("= int 49 =");
System.out.println(Character.isDigit(49)); // true
= char '1' =
true
= int 1 =
false
= Unicode 31h (49) =
true
= int 49 =
true