gpt4 book ai didi

java - 使用扫描仪出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 13:42:34 30 4
gpt4 key购买 nike

我是编程新手,我开始用 Java 创建一个简单的计算器,但我不断收到错误

    for (int i = 0; i < user_input.length(); i++)

错误提示:

Exception in thread "main" java.lang.NullPointerException

如何解决这个问题?

import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.util.Scanner;

public class stringCalculator
{
public static ArrayList<String> input = new ArrayList<String>();
public static ArrayList<String> calcOperators = new ArrayList<String>();
public static ArrayList<Integer> calcOperands = new ArrayList<Integer>();
public static String user_input;
public static String first;
public static int int1;
public static String char1;
public static int int2;
public static String next;
}

public static void input()
{
Scanner user_input = new Scanner(System.in);
int1 = user_input.nextInt();
char1 = user_input.next();
int2 = user_input.nextInt();
next = user_input.nextLine();
}

public void calcOperators()
{
for (int i = 0; i < user_input.length(); i++)
{
if (char1 == "+")
{
calcOperators.add(char1);
}
else if (char1 == "-")
{
calcOperators.add(char1);
}
else if (char1 == "char1")
{
calcOperators.add(char1);
}
else if (char1 == "/")
{
calcOperators.add(char1);
}
}


public void calcOperands()
{
for (int i = 0; i < user_input.length(); i++)
{
if (int1 == 1 || int2 == 1)
{
calcOperands.add(1);
}
else if (int1 == 2 || int2 == 2)
{
calcOperands.add(2);
}
else if (int1 == 3 || int2 == 3)
{
calcOperands.add(3);
}
else if (int1 == 4 || int2 == 4)
{
calcOperands.add(4);
}
else if (int1 == 5 || int2 == 5)
{
calcOperands.add(5);
}
else if (int1 == 6 || int2 == 6)
{
calcOperands.add(6);
}
else if (int1 == 7 || int2 == 7)
{
calcOperands.add(7);
}
else if (int1 == 8 || int2 == 8)
{
calcOperands.add(8);
}
else if (int1 == 9 || int2 == 9)
{
calcOperands.add(9);
}
else if (int1 == 0 || int2 == 0)
{
calcOperands.add(0);
}
}
}

}

public class Main
{
public static void main(String[] args)
{
stringCalculator c = new stringCalculator();
c.input();
c.calcOperators();
c.calcOperands();
}
}

最佳答案

我有点困惑为什么你有

public static String user_input

然后

Scanner user_input = new Scanner(System.in);
int1 = user_input.nextInt();
char1 = user_input.next();
int2 = user_input.nextInt();
next = user_input.nextLine();

最后,您在循环中对字符串和整数使用相同的变量名称:

for (int i = 0; i < user_input.length(); i++)
for (int i = 0; i < user_input.length(); i++)

我强烈建议重构此代码。

        .....
private ArrayList<String> input = new ArrayList<String>();
private ArrayList<String> calcOperators = new ArrayList<String>();
private ArrayList<Integer> calcOperands = new ArrayList<Integer>();
private String user_input;
private String first;
private String next;
private String char1;
private int integer2;
private int integer1;
}

public static void input()
{
Scanner input = new Scanner(System.in);
int int1 = input.nextInt();
int int2 = input.nextInt();
string str = input.next();
string nxt = input.next();

setInteger1(int1);
setInteger2(int2);
setStringFirst(str);
setStringNext(...);
....
// And so on
}

private void setInteger1(int int1) {
this.integer1 = int1;
}

private Integer getInteger1() {
return this.integer1;
}

private void setInteger2(int int2) {
this.integer2 = int2;
}

private Integer getInteger2() {
return this.integer2;
}

private void setStringFirst(String fst) {
this.first = fst;
}

private String getStringFirst() {
return this.first;
}

// And so on. Create all get and set methods for each global variable and for future
// reference do not use variable names that are the same as method, names
// and try to use more meaningful variable names. In fact, if you look at
// Java naming conventions it would do you good.

您能否告诉我们这些循环的用途?因为我实在不明白这是什么?您想迭代“事物”数组并将每个操作与给定的数组元素匹配吗?或者您只想用一个元素来匹配其中一个操作?

旁注:类名应大写:

public class StringCalculator

================================================== =====================================

好的,我制作了一个简单的程序,允许您将字符串添加到数组中,然后显示它。它基于您正在做的事情,尽管您会发现它的结构不同。这应该会给您一个良好的开端,并允许您进一步实现并完成您正在做的任何事情。

    public class Thing {

private String operator;

private void getUserInput() {
Scanner input = new Scanner(System.in);
if(input.hasNextInt()) {
System.out.println("I have entered an integer: " + input.nextInt());
}
else {
setOperator(input.nextLine());
addOperators();
System.out.println("I have entered a string: " + getOperator());
}
displayThing();
}

private ArrayList<String> addOperators() {
ArrayList<String> operatorsList = new ArrayList<String>();

if(getOperator().equals("+")) {
operatorsList.add(operator);
}
if(getOperator().equals("-")) {
operatorsList.add(operator);
}
else {
operatorsList.add(getOperator());
}
return operatorsList;
}

private void displayThing() {
System.out.println(addOperators());
}

public static void main(String[] args) {
Thing program = new Thing();
program.getUserInput();
}

// Setters and getters
private void setOperator(String operator) {
this.operator = operator;
}

private String getOperator() {
return this.operator;
}

}

关于java - 使用扫描仪出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594473/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com