Java: 循环不工作,变量初始化错误

Java: loop doesn't work, errors with variables initialization

你能解释一下为什么这个循环在用户输入 "yes" 的情况下不起作用,以及为什么变量初始化有错误。

import java.util.ArrayList;
import java.util.Scanner;

public class Main { 

  public static void main(String args[]) {
    Scanner src;
    String amount;
    String counterparty;
    String dt;
    String ct;
    System.out.println("Create new transaction:yes/no");
    Scanner abc = new Scanner(System.in);
    String g = abc.nextLine();

    if (g=="yes") {
      System.out.println("Amount of transaction:");
      src = new Scanner(System.in);
      amount = src.nextLine();
      System.out.println("Counterparty:");
      counterparty = src.nextLine();
      System.out.println("Dt:");
      dt = src.nextLine();
      System.out.println("Ct:");
      ct = src.nextLine();
    }
    else if (g=="no") {
      amount="0";
    }

    System.out.println("Transaction:");
    ArrayList <String> Provodka = new ArrayList();
    Provodka.add(amount);
    Provodka.add(counterparty);
    Provodka.add(dt);
    Provodka.add(ct);
    for (int i = 0; i < Provodka.size(); i++) {
        String value = Provodka.get(i);
        System.out.println("Element: " + value);
    }
  }
}

只需初始化局部变量并使用 equals() 方法而不是“==”

public static void main(String args[]) {
    Scanner src;
    String amount = null;
    String counterparty = null;
    String dt = null;
    String ct = null;
    System.out.println("Create new transaction:yes/no");
    Scanner abc = new Scanner(System.in);
    String g = abc.nextLine();
           if (g.equals("yes"))
                   {
        System.out.println("Amount of transaction:");
         src = new Scanner(System.in);
        amount = src.nextLine();
        System.out.println("Counterparty:");
         counterparty = src.nextLine();
        System.out.println("Dt:");
         dt = src.nextLine();
        System.out.println("Ct:");
         ct = src.nextLine();
    }
  else if (g.equals("no")){
   amount="0";
    }

    System.out.println("Transaction:");
    ArrayList <String> Provodka = new ArrayList();
    Provodka.add(amount);
    Provodka.add(counterparty);
    Provodka.add(dt);
    Provodka.add(ct);
    for (int i = 0; i < Provodka.size(); i++) {
        String value = Provodka.get(i);
        System.out.println("Element: " + value);
    }
}

在字符串比较中,您将字符串与 '==' 进行比较。 使用 equals() 方法比较字符串。 例如:-

if ("yes".equals(g)){

}

首先,Scanner有很多不必要的声明。对扫描仪使用一个变量将适用于所有输入。其次,在 main 方法之上声明你的变量并使它们成为静态的,在这里你不需要总是初始化它们。最后,使用 g.equalsIgnoreCase("yes") 而不是 g == "yes",这样无论您是否在大写中键入 yes,它仍然会注册。试试下面的操作

    public static String g; 
    public static String amount;
    public static String counterparty;
    public static String dt;
    public static String ct;

    public static void main(String args[]) {

          Scanner s = new Scanner(System.in);


          System.out.println("Create new transaction:yes/no");
              g= s.nextLine();

          if (g.equalsIgnoreCase("yes")) {
              System.out.println("Amount of transaction: ");
                  amount = s.nextLine();

              System.out.println("Counterparty: ");
                  counterparty = s.nextLine();

              System.out.println("Dt: ");
                  dt = s.nextLine();

              System.out.println("Ct: ");
                  ct = s.nextLine();
          }
          else if (g.equalsIgnoreCase("no")) {

              amount = "0";
          }

          System.out.println("Transaction:");
          ArrayList <String> Provodka = new ArrayList();
          Provodka.add(amount);
          Provodka.add(counterparty);
          Provodka.add(dt);
          Provodka.add(ct);

          for (int i = 0; i < Provodka.size(); i++) {
              String value = Provodka.get(i);
              System.out.println("Element: " + value);
          }
      }
  }