Java - error: cannot find symbol - presumably scoping issue
Java - error: cannot find symbol - presumably scoping issue
我是第一次在这里提问,如果我没有考虑到所有事情,请对我温柔点。我会努力的。
针对实际问题。我最近才开始编程 Java,所以这可能是一些基本的东西,尽管我无法通过检查类似的问题来找出问题所在。
我敢打赌这个错误是由于范围问题引发的,但我不能确定,甚至不能修复它。
public static void main(String[] args){
Artikel a = new Artikel();
Scanner scanner = new Scanner(System.in);
if (args.length !=8){
System.out.println("Bitte geben Sie die folgenden Werte, getrennt mit einem ',' ein: Artikelname, Artikelnummer, Mengeneinheit, Packungsgröße, Mindestbestand, Bestellmenge, Lagerbestand, Hersteller");
String eingabe = scanner.next();
String parts[] = eingabe.split(",");
String string1 = parts[0];
String string2 = parts[1];
String string3 = parts[2];
int int1 = Integer.parseInt(parts[3]);
int int2 = Integer.parseInt(parts[4]);
int int3 = Integer.parseInt(parts[5]);
int int4 = Integer.parseInt(parts[6]);
String string4 = parts[7];
a.Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
a.Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]), args[7]);
}
这是错误所指的位,特别是我尝试访问 a.Artikel(...) 的行。如果代码位不够用,请告诉我。
编辑:
public class Artikel{
private String Artikelname;
private String Artikelnr;
private String menge;
private int packgroesse;
private int mindestZahl;
private int bestell;
private int lager;
private String Hersteller;
//Defaultkonstruktor
public Artikel(){
this.Artikelname = "Bez1";
this.Artikelnr = "0";
this.menge = "Beispiel";
this.packgroesse = 0;
this.mindestZahl = 0;
this.bestell = 0;
this.lager = 0;
this.Hersteller = "Muster";
}
//Konstruktor
public Artikel(String Artikelname, String Artikelnr, String menge, int packgroesse, int mindestZahl, int bestell, int lager, String Hersteller){
this.Artikelname = Artikelname;
this.Artikelnr = Artikelnr;
this.menge = menge;
if(packgroesse < 0 ){
System.out.println("Die Packungsgroesse kann nicht negativ sein! Der Wert wurde auf den Standardwert (10) gesetzt.");
}
else{
this.packgroesse = packgroesse;
}
if(mindestZahl < 0 ){
System.out.println("Der Mindestbestand kann nicht negativ sein! Der Wert wurde auf den Standardwert (30) gesetzt.");
}
else{
this.mindestZahl = mindestZahl;
}
if(bestell < 0 ){
System.out.println("Die Bestellmenge kann nicht negativ sein! Der Wert wurde auf den Standardwert (50) gesetzt.");
}
else{
this.bestell = bestell;
}
if(lager < 0 ){
System.out.println("Der Lagerbestand kann nicht negativ sein! Der Wert wurde auf den Standardwert (50) gesetzt.");
}
else{
this.lager = lager;
}
this.Hersteller = Hersteller;
}
如果 class Artikel
的定义使其具有接受各种参数的构造函数,例如:
public class Artikel {
...
public Artikel (String s1, String s2, String s3, int i1, int i2, int i3, int i4, String s4) {
// set the various values in the instance variables
...
}
}
那么基于上述代码的解决方案类似于:
public static void main(String[] args){
// CHANGE: just define
Artikel a;
Scanner scanner = new Scanner(System.in);
if (args.length !=8){
System.out.println("Bitte geben Sie die folgenden Werte, getrennt mit einem ',' ein: Artikelname, Artikelnummer, Mengeneinheit, Packungsgröße, Mindestbestand, Bestellmenge, Lagerbestand, Hersteller");
String eingabe = scanner.next();
String parts[] = eingabe.split(",");
String string1 = parts[0];
String string2 = parts[1];
String string3 = parts[2];
int int1 = Integer.parseInt(parts[3]);
int int2 = Integer.parseInt(parts[4]);
int int3 = Integer.parseInt(parts[5]);
int int4 = Integer.parseInt(parts[6]);
String string4 = parts[7];
// CHANGE: instantiate here
a = new Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
// CHANGE: instantiate here
a = new Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]), args[7]);
}
当然,这取决于 Artikel
class 是如何定义的。
Artikel a;
if (args.length != 8 ) {
...
String eingabe = scanner.nextLine();
String[] parts = eingabe.split(", *", 8); // At most 8.
a = new Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
a = new Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]),
Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]),
args[7]);
}
有a
的变量声明,并用new Artikel(...)
的值填充,一个新对象
另外 Scanner.next()
读取一个标记,而 nextLine
读取一整行。
如果我们这样做怎么样:
public static void main(String[] args){
Artikel a;
Scanner scanner = new Scanner(System.in);
if (args.length !=8){
System.out.println("Bitte geben Sie die folgenden Werte, getrennt mit einem ',' ein: Artikelname, Artikelnummer, Mengeneinheit, Packungsgröße, Mindestbestand, Bestellmenge, Lagerbestand, Hersteller");
String eingabe = scanner.next();
String parts[] = eingabe.split(",");
String string1 = parts[0];
String string2 = parts[1];
String string3 = parts[2];
int int1 = Integer.parseInt(parts[3]);
int int2 = Integer.parseInt(parts[4]);
int int3 = Integer.parseInt(parts[5]);
int int4 = Integer.parseInt(parts[6]);
String string4 = parts[7];
a = new Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
a = new Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]), args[7]);
}
我认为您应该在 java 中了解如何使用构造函数创建对象。
Look here
请注意,一旦您使用 Artikel a = new Artikel()
创建了一个对象,您就不能再次调用构造函数并期望它用新值初始化同一个对象。此外,构造函数总是使用 new 运算符调用,并创建一个全新的对象。此外,构造函数不是 Java.Hence 中的方法,您不能像 a.Artikel(...)
那样调用。 Look Here
我是第一次在这里提问,如果我没有考虑到所有事情,请对我温柔点。我会努力的。
针对实际问题。我最近才开始编程 Java,所以这可能是一些基本的东西,尽管我无法通过检查类似的问题来找出问题所在。
我敢打赌这个错误是由于范围问题引发的,但我不能确定,甚至不能修复它。
public static void main(String[] args){
Artikel a = new Artikel();
Scanner scanner = new Scanner(System.in);
if (args.length !=8){
System.out.println("Bitte geben Sie die folgenden Werte, getrennt mit einem ',' ein: Artikelname, Artikelnummer, Mengeneinheit, Packungsgröße, Mindestbestand, Bestellmenge, Lagerbestand, Hersteller");
String eingabe = scanner.next();
String parts[] = eingabe.split(",");
String string1 = parts[0];
String string2 = parts[1];
String string3 = parts[2];
int int1 = Integer.parseInt(parts[3]);
int int2 = Integer.parseInt(parts[4]);
int int3 = Integer.parseInt(parts[5]);
int int4 = Integer.parseInt(parts[6]);
String string4 = parts[7];
a.Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
a.Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]), args[7]);
}
这是错误所指的位,特别是我尝试访问 a.Artikel(...) 的行。如果代码位不够用,请告诉我。
编辑:
public class Artikel{
private String Artikelname;
private String Artikelnr;
private String menge;
private int packgroesse;
private int mindestZahl;
private int bestell;
private int lager;
private String Hersteller;
//Defaultkonstruktor
public Artikel(){
this.Artikelname = "Bez1";
this.Artikelnr = "0";
this.menge = "Beispiel";
this.packgroesse = 0;
this.mindestZahl = 0;
this.bestell = 0;
this.lager = 0;
this.Hersteller = "Muster";
}
//Konstruktor
public Artikel(String Artikelname, String Artikelnr, String menge, int packgroesse, int mindestZahl, int bestell, int lager, String Hersteller){
this.Artikelname = Artikelname;
this.Artikelnr = Artikelnr;
this.menge = menge;
if(packgroesse < 0 ){
System.out.println("Die Packungsgroesse kann nicht negativ sein! Der Wert wurde auf den Standardwert (10) gesetzt.");
}
else{
this.packgroesse = packgroesse;
}
if(mindestZahl < 0 ){
System.out.println("Der Mindestbestand kann nicht negativ sein! Der Wert wurde auf den Standardwert (30) gesetzt.");
}
else{
this.mindestZahl = mindestZahl;
}
if(bestell < 0 ){
System.out.println("Die Bestellmenge kann nicht negativ sein! Der Wert wurde auf den Standardwert (50) gesetzt.");
}
else{
this.bestell = bestell;
}
if(lager < 0 ){
System.out.println("Der Lagerbestand kann nicht negativ sein! Der Wert wurde auf den Standardwert (50) gesetzt.");
}
else{
this.lager = lager;
}
this.Hersteller = Hersteller;
}
如果 class Artikel
的定义使其具有接受各种参数的构造函数,例如:
public class Artikel {
...
public Artikel (String s1, String s2, String s3, int i1, int i2, int i3, int i4, String s4) {
// set the various values in the instance variables
...
}
}
那么基于上述代码的解决方案类似于:
public static void main(String[] args){
// CHANGE: just define
Artikel a;
Scanner scanner = new Scanner(System.in);
if (args.length !=8){
System.out.println("Bitte geben Sie die folgenden Werte, getrennt mit einem ',' ein: Artikelname, Artikelnummer, Mengeneinheit, Packungsgröße, Mindestbestand, Bestellmenge, Lagerbestand, Hersteller");
String eingabe = scanner.next();
String parts[] = eingabe.split(",");
String string1 = parts[0];
String string2 = parts[1];
String string3 = parts[2];
int int1 = Integer.parseInt(parts[3]);
int int2 = Integer.parseInt(parts[4]);
int int3 = Integer.parseInt(parts[5]);
int int4 = Integer.parseInt(parts[6]);
String string4 = parts[7];
// CHANGE: instantiate here
a = new Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
// CHANGE: instantiate here
a = new Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]), args[7]);
}
当然,这取决于 Artikel
class 是如何定义的。
Artikel a;
if (args.length != 8 ) {
...
String eingabe = scanner.nextLine();
String[] parts = eingabe.split(", *", 8); // At most 8.
a = new Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
a = new Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]),
Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]),
args[7]);
}
有a
的变量声明,并用new Artikel(...)
的值填充,一个新对象
另外 Scanner.next()
读取一个标记,而 nextLine
读取一整行。
如果我们这样做怎么样:
public static void main(String[] args){
Artikel a;
Scanner scanner = new Scanner(System.in);
if (args.length !=8){
System.out.println("Bitte geben Sie die folgenden Werte, getrennt mit einem ',' ein: Artikelname, Artikelnummer, Mengeneinheit, Packungsgröße, Mindestbestand, Bestellmenge, Lagerbestand, Hersteller");
String eingabe = scanner.next();
String parts[] = eingabe.split(",");
String string1 = parts[0];
String string2 = parts[1];
String string3 = parts[2];
int int1 = Integer.parseInt(parts[3]);
int int2 = Integer.parseInt(parts[4]);
int int3 = Integer.parseInt(parts[5]);
int int4 = Integer.parseInt(parts[6]);
String string4 = parts[7];
a = new Artikel(string1, string2, string3, int1, int2, int3, int4, string4);
}
else{
a = new Artikel(args[0], args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]), args[7]);
}
我认为您应该在 java 中了解如何使用构造函数创建对象。 Look here
请注意,一旦您使用 Artikel a = new Artikel()
创建了一个对象,您就不能再次调用构造函数并期望它用新值初始化同一个对象。此外,构造函数总是使用 new 运算符调用,并创建一个全新的对象。此外,构造函数不是 Java.Hence 中的方法,您不能像 a.Artikel(...)
那样调用。 Look Here