非静态方法next()无法从静态上下文中引用

3

我正在尝试将mm/dd/yyyy格式的日期解析成单独的字段,但是当我尝试编译时,我收到以下错误:

非静态方法next()无法从静态上下文引用

什么可能导致这个错误?

import java.util.Scanner;

public class Problem39
{

    public static void main(String [ ] args)
    {

    boolean isLeapYear =false;
    int maxDay=0;
    String stringDate;

    System.out.println("Enter the date in mm/dd/yyyy format. ");  //user input
    Scanner keyboard = new Scanner(System.in);                    //read input
    String date=Scanner.next();                                //store input
    String temp=date.split("/");  //parse date
    int month=IntegerParseInt(temp[1]);
    int day=IntegerParseInt(temp[0]);
    int year=IntegerParseInt(temp[2]);

可能是因为next()是一个Scanner实例方法,而你没有在扫描器实例上调用它。解析也不正确。 - Dave Newton
2
@Petro,为什么OP的困惑会导致负评?难道SO不是为了澄清这种常见的困惑而存在的吗? - kaveman
同时将IntegerParseInt更改为Integer.parseInt - RanRag
@kaveman,这只是静态/实例方法之间的区别非常基本的Java知识。此外,stackoverflow上已经有三个关于“为什么非静态方法无法从静态上下文中引用”的问题得到了回答。 - Petro Semeniuk
5个回答

5

改变:

String date = Scanner.next();  

到:

String date = keyboard.next();  

next()是一个实例方法,因此您必须在Scanner类的实例上调用它。

另外,请更改:

String temp = date.split("/"); 

至:

String[] temp = date.split("/"); 

split()方法返回一个字符串数组。


唯一能够真正解释答案的方法就是提供答案! - kaveman
现在它在下一行抱怨不兼容的类型 String temp=date.split("/"); //解析日期 - Ian Conner

1

你的意思是

String date = keyboard.next();

替代

String date = Scanner.next();

1

修改代码:

String date=Scanner.next();

至:

String date = keyboard.next();

1

应该使用Integer.parseInt()而不是IntegerParseInt

同时改为这样

String date = keyboard.next();

1
应该使用keyboard.next()而不是Scanner.next()

1
嗨,Ian,欢迎你。你不应该直接说(写)“谢谢”,而是要点赞答案(在答案下面的Δ符号)并接受最佳答案(带有√符号)。这会给回答者声誉,并避免冗长的对话(“谢谢”/“不用谢”/...)。 - user unknown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接