在 Java 中返回字符串方法?
Returning String Methods in Java?
我正在开始编程 class,直到现在,我们已经开始使用方法,但我不完全确定我是否理解其中的很多内容对我来说很有意义"static," "void," 和 "return" 语句。
特别是对于这个作业,我以为我已经弄清楚了,但它在 main 方法的行上说了 "can not find symbol histogram",尽管我显然是从另一个方法返回它。任何人都可以帮助我吗?
作业:“您发现在编写程序时可能经常需要直方图,因此您决定让此程序使用您的程序 310a2 直方图。您可以添加到此程序或将其用作 class。您还将编写一个 class(或方法)来生成各种范围内的随机数。您可能希望星号代表不同的值(1、100 或 1000 个单位)。您可能还希望使用星号以外的字符,例如 $ 来表示图表的单位。运行 程序有足够的次数来说明程序的各种能力。
需要的陈述:输出、循环控制、决策、class(可选)、方法。
示例输出:
10 月份的销售额
日日销量图表
2 37081 *************************************
3 28355 ****************************
4 39158 ******************************************
5 24904 ************************
6 28879 ****************************
7 13348 *************
“
这是我拥有的:
import java.util.Random;
public class prog310t
{
public static int randInt(int randomNum) //determines the random value for the day
{
Random rand = new Random();
randomNum = rand.nextInt((40000 - 1000) + 1) + 10000;
return randomNum;
}
public String histogram (int randomNum) //creates the histogram string
{
String histogram = "";
int roundedRandom = (randomNum/1000);
int ceiling = roundedRandom;
for (int k = 1; k < ceiling; k++)
{
histogram = histogram + "*";
}
return histogram;
}
public void main(String[] Args)
{
System.out.println("Sales for October\n");
System.out.println("Day Daily Sales Graph");
for (int k = 2; k < 31; k++)
{
if (k == 8 || k == 15 || k == 22 || k == 29)
{
k++;
}
System.out.print(k + " ");
int randomNum = 0;
randInt(randomNum);
System.out.print(randomNum + " ");
histogram (randomNum);
System.out.print(histogram + "\n");
}
}
}
编辑:谢谢你们,现在我明白了静态的意思了。现在我有一个新问题;程序运行,但直方图返回为空。有人可以帮我理解为什么吗?新代码:
import java.util.Random;
public class prog310t
{
public static int randInt(int randomNum) //determines the random value for the day
{
Random rand = new Random();
randomNum = rand.nextInt((40000 - 1000) + 1) + 10000;
return randomNum;
}
public static String histogram (int marketValue) //creates the histogram string
{
String histogram = "";
int roundedRandom = (marketValue/1000);
int ceiling = roundedRandom;
for (int k = 1; k < ceiling; k++)
{
histogram = histogram + "*";
}
return histogram;
}
public static void main(String[] Args)
{
System.out.println("Sales for October\n");
System.out.println("Day Daily Sales Graph");
for (int k = 2; k < 31; k++)
{
if (k == 8 || k == 15 || k == 22 || k == 29)
{
k++;
}
System.out.print(k + " ");
int randomNum = 0;
int marketValue = randInt(randomNum);
System.out.print(marketValue + " ");
String newHistogram = histogram (randomNum);
System.out.print(newHistogram + "\n");
}
}
}
在调用 histogrom (randomNum)
之前,您需要将直方图设为静态或将具有直方图的对象声明为方法
例如
prog310t myClass = new prog310t();
myClass.histogram()
你是对的,你的问题根源于不理解 static
。这方面有很多资源,但在这里足以说明 static
属于 Class 而不是静态的属于特定 实例。也就是说
public class A{
public static int b;
public int x;
public int doStuff(){
return x;
}
public static void main(String[] args){
System.out.println(b); //Valid. Who's b? A (the class we are in)'s b.
System.out.println(x); //Error. Who's x? no instance provided, so we don't know.
doStuff(); //Error. Who are we calling doStuff() on? Which instance?
A a = new A();
System.out.println(a.x); //Valid. Who's x? a (an instance of A)'s x.
}
}
与您的方法 histogram
不是 static
相关,因此您需要一个实例来调用它。你不应该需要一个实例;只需将方法设为静态即可:
将 public String histogram(int randomNum)
更改为 public static String histogram(int randomNum)
。
完成后,行 histogram(randomNum);
生效。但是,您仍然会在 System.out.print(histogram + "\n");
上遇到错误,因为此处定义的 histogram
是函数,而不是变量。这与 return
语句有关。当显示 return x
(对于 x
的任何值)时,它表示终止当前方法调用并将值 x
交给调用该方法的任何人。
例如,考虑表达式 2 + 3
。如果你说 int x = 2 + 3
,你会期望 x
之后有值 5
。现在考虑一个方法:
public static int plus(int a, int b){
return a + b;
}
和语句:int x = plus(2, 3);
。同样在这里,我们希望 x
之后具有值 5
。计算完成,等待该值(int
类型)的人接收并使用该值,但是将使用该类型的单个值代替它。例如:
int x = plus(plus(1,2),plus(3,plus(4,1));
-> x
的值为 11。
回到您的示例:您需要为从 histogram(randomNum);
返回的字符串值分配一个变量,例如:
将 histogram(randomNum)
更改为 String s = histogram(randomNum)
。
这将使所有编译通过,但您将遇到最后一个障碍:这东西不会 运行!这是因为 运行nable main
方法需要是静态的。因此,将您的主要方法更改为具有签名:
public static void main(String[] args){...}
然后点击绿色按钮!
对于初学者,您的主要方法应该是静态的:
public static void main(String[] Args)
没有实例就无法调用实例方法 class 它们属于可以在没有实例的情况下调用静态方法的地方。因此,如果您想在 main 方法中调用其他方法,它们也必须是静态的,除非您创建一个 prog310t
类型的对象,然后使用该对象调用方法示例:
public static void main(String[] Args)
{
prog310t test = new prog310t();
test.histogram(1);
}
但在您的情况下,您可能想要这样做:
public static String histogram (int randomNum)
public static void main(String[] Args)
{
histogram(1);
}
此外,您没有在主方法中捕获 histogram() 方法的 return,您应该这样做:
System.out.print(histogram(randomNum) + "\n");
或
String test = histogram(randomNum);
System.out.print(test + "\n");
静态方法是 class 的一部分,可以在没有实例的情况下调用,但实例方法只能从实例示例中调用:
public class Test
{
public static void main(String[] args)
{
getNothingStatic();// this is ok
getNothing(); // THIS IS NOT OK IT WON'T WORK NEEDS AN INSTANCE
Test test = new Test();
test.getNothing(); // this is ok
getString(); // this is ok but you are not capturing the return value
String myString = getString(); // now the return string is stored in myString for later use
}
public void getNothing()
{
}
public static void getNothingStatic()
{
}
public static String getString()
{
return "hello";
}
}
Void 表示该方法没有 returning 任何东西,它只是在做一些处理。您可以 return 基本类型或对象类型代替 void,但在您的方法中,如果您不使用 void,则必须指定 return。
我正在开始编程 class,直到现在,我们已经开始使用方法,但我不完全确定我是否理解其中的很多内容对我来说很有意义"static," "void," 和 "return" 语句。
特别是对于这个作业,我以为我已经弄清楚了,但它在 main 方法的行上说了 "can not find symbol histogram",尽管我显然是从另一个方法返回它。任何人都可以帮助我吗?
作业:“您发现在编写程序时可能经常需要直方图,因此您决定让此程序使用您的程序 310a2 直方图。您可以添加到此程序或将其用作 class。您还将编写一个 class(或方法)来生成各种范围内的随机数。您可能希望星号代表不同的值(1、100 或 1000 个单位)。您可能还希望使用星号以外的字符,例如 $ 来表示图表的单位。运行 程序有足够的次数来说明程序的各种能力。
需要的陈述:输出、循环控制、决策、class(可选)、方法。
示例输出:
10 月份的销售额
日日销量图表
2 37081 *************************************
3 28355 ****************************
4 39158 ******************************************
5 24904 ************************
6 28879 ****************************
7 13348 ************* “
这是我拥有的:
import java.util.Random;
public class prog310t
{
public static int randInt(int randomNum) //determines the random value for the day
{
Random rand = new Random();
randomNum = rand.nextInt((40000 - 1000) + 1) + 10000;
return randomNum;
}
public String histogram (int randomNum) //creates the histogram string
{
String histogram = "";
int roundedRandom = (randomNum/1000);
int ceiling = roundedRandom;
for (int k = 1; k < ceiling; k++)
{
histogram = histogram + "*";
}
return histogram;
}
public void main(String[] Args)
{
System.out.println("Sales for October\n");
System.out.println("Day Daily Sales Graph");
for (int k = 2; k < 31; k++)
{
if (k == 8 || k == 15 || k == 22 || k == 29)
{
k++;
}
System.out.print(k + " ");
int randomNum = 0;
randInt(randomNum);
System.out.print(randomNum + " ");
histogram (randomNum);
System.out.print(histogram + "\n");
}
}
}
编辑:谢谢你们,现在我明白了静态的意思了。现在我有一个新问题;程序运行,但直方图返回为空。有人可以帮我理解为什么吗?新代码:
import java.util.Random;
public class prog310t
{
public static int randInt(int randomNum) //determines the random value for the day
{
Random rand = new Random();
randomNum = rand.nextInt((40000 - 1000) + 1) + 10000;
return randomNum;
}
public static String histogram (int marketValue) //creates the histogram string
{
String histogram = "";
int roundedRandom = (marketValue/1000);
int ceiling = roundedRandom;
for (int k = 1; k < ceiling; k++)
{
histogram = histogram + "*";
}
return histogram;
}
public static void main(String[] Args)
{
System.out.println("Sales for October\n");
System.out.println("Day Daily Sales Graph");
for (int k = 2; k < 31; k++)
{
if (k == 8 || k == 15 || k == 22 || k == 29)
{
k++;
}
System.out.print(k + " ");
int randomNum = 0;
int marketValue = randInt(randomNum);
System.out.print(marketValue + " ");
String newHistogram = histogram (randomNum);
System.out.print(newHistogram + "\n");
}
}
}
在调用 histogrom (randomNum)
之前,您需要将直方图设为静态或将具有直方图的对象声明为方法
例如
prog310t myClass = new prog310t();
myClass.histogram()
你是对的,你的问题根源于不理解 static
。这方面有很多资源,但在这里足以说明 static
属于 Class 而不是静态的属于特定 实例。也就是说
public class A{
public static int b;
public int x;
public int doStuff(){
return x;
}
public static void main(String[] args){
System.out.println(b); //Valid. Who's b? A (the class we are in)'s b.
System.out.println(x); //Error. Who's x? no instance provided, so we don't know.
doStuff(); //Error. Who are we calling doStuff() on? Which instance?
A a = new A();
System.out.println(a.x); //Valid. Who's x? a (an instance of A)'s x.
}
}
与您的方法 histogram
不是 static
相关,因此您需要一个实例来调用它。你不应该需要一个实例;只需将方法设为静态即可:
将 public String histogram(int randomNum)
更改为 public static String histogram(int randomNum)
。
完成后,行 histogram(randomNum);
生效。但是,您仍然会在 System.out.print(histogram + "\n");
上遇到错误,因为此处定义的 histogram
是函数,而不是变量。这与 return
语句有关。当显示 return x
(对于 x
的任何值)时,它表示终止当前方法调用并将值 x
交给调用该方法的任何人。
例如,考虑表达式 2 + 3
。如果你说 int x = 2 + 3
,你会期望 x
之后有值 5
。现在考虑一个方法:
public static int plus(int a, int b){
return a + b;
}
和语句:int x = plus(2, 3);
。同样在这里,我们希望 x
之后具有值 5
。计算完成,等待该值(int
类型)的人接收并使用该值,但是将使用该类型的单个值代替它。例如:
int x = plus(plus(1,2),plus(3,plus(4,1));
-> x
的值为 11。
回到您的示例:您需要为从 histogram(randomNum);
返回的字符串值分配一个变量,例如:
将 histogram(randomNum)
更改为 String s = histogram(randomNum)
。
这将使所有编译通过,但您将遇到最后一个障碍:这东西不会 运行!这是因为 运行nable main
方法需要是静态的。因此,将您的主要方法更改为具有签名:
public static void main(String[] args){...}
然后点击绿色按钮!
对于初学者,您的主要方法应该是静态的:
public static void main(String[] Args)
没有实例就无法调用实例方法 class 它们属于可以在没有实例的情况下调用静态方法的地方。因此,如果您想在 main 方法中调用其他方法,它们也必须是静态的,除非您创建一个 prog310t
类型的对象,然后使用该对象调用方法示例:
public static void main(String[] Args)
{
prog310t test = new prog310t();
test.histogram(1);
}
但在您的情况下,您可能想要这样做:
public static String histogram (int randomNum)
public static void main(String[] Args)
{
histogram(1);
}
此外,您没有在主方法中捕获 histogram() 方法的 return,您应该这样做:
System.out.print(histogram(randomNum) + "\n");
或
String test = histogram(randomNum);
System.out.print(test + "\n");
静态方法是 class 的一部分,可以在没有实例的情况下调用,但实例方法只能从实例示例中调用:
public class Test
{
public static void main(String[] args)
{
getNothingStatic();// this is ok
getNothing(); // THIS IS NOT OK IT WON'T WORK NEEDS AN INSTANCE
Test test = new Test();
test.getNothing(); // this is ok
getString(); // this is ok but you are not capturing the return value
String myString = getString(); // now the return string is stored in myString for later use
}
public void getNothing()
{
}
public static void getNothingStatic()
{
}
public static String getString()
{
return "hello";
}
}
Void 表示该方法没有 returning 任何东西,它只是在做一些处理。您可以 return 基本类型或对象类型代替 void,但在您的方法中,如果您不使用 void,则必须指定 return。