在Java中返回字符串方法?

时间:2015-01-16 16:14:31

标签: java string methods

我正处于初级编程课程中,其中很多对我来说都是有意义的,直到现在我们开始使用方法并且我不完全确定我理解“静态”,“无效,“和”返回“陈述。

特别是对于这个任务,我认为我已经弄明白了,但它说主要方法中的行“找不到符号直方图”,尽管我明确地从另一个方法返回它。有人能帮帮我吗?

作业:“您可能会在编写程序时经常需要直方图,因此您决定使用程序310a2直方图。您可以添加到此程序或将其用作课程。您还可以编写课程(或方法)将生成各种范围的随机数。您可能希望星号代表不同的值(1,100或1000单位)。您可能还希望使用星号以外的字符,例如$ to表示图表的单位。运行程序足够多次以说明程序的各种能力。

所需语句:输出,循环控制,决策制定,类(可选),方法。

示例输出:

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");
    }
  }


}

3 个答案:

答案 0 :(得分:4)

您确定问题的根源在于不了解static。这方面有很多资源,但在这里可以说static属于,而不是静态的东西属于特定的实例。这意味着

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)); - &gt; x的值为11。

回到你的例子:你需要为从histogram(randomNum);返回的String值分配一个变量,如下:

histogram(randomNum)更改为String s = histogram(randomNum)

这将使它全部编译,但你会遇到最后的障碍:事情不会运行!这是因为可运行的main方法需要是静态的。因此,更改主要方法以获得签名:

public static void main(String[] args){...}

然后点击绿色按钮!

答案 1 :(得分:2)

首先,你的主要方法应该是静态的:

public static void main(String[] Args)

如果没有它们所属的类的实例,则无法调用实例方法,而在没有实例的情况下可以调用静态方法。因此,如果要在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);
}

另外你没有在main方法中捕获histogram()方法的返回,你应该这样做:

  System.out.print(histogram(randomNum) + "\n");

或者

String test = histogram(randomNum);
System.out.print(test + "\n");

静态方法是类的一部分,可以在没有实例的情况下调用,但实例方法只能从实例示例中调用:

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意味着该方法不会返回任何正在进行某些处理的东西。您可以返回原始或对象类型来代替void,但是如果不使用void,则必须在方法中指定返回。

答案 2 :(得分:0)

在调用histogrom (randomNum)之前,您需要使直方图静态或声明具有直方图的对象作为方法

例如

prog310t myClass = new prog310t();

myClass.histogram()