2016-05-14 155 views
2

我刚刚开始使用Java,到目前为止一直只是在解决在线问题,而不是写程序的全部功能,但只调整几行代码已经组织好的代码。但是,我仍然努力在IntelliJ Idea的一个编译程序中组织我的代码,这让我感到困惑,例如,如何正确调用方法调用。 这里就是我越来越坚持:一个例子来自codingbat.com:打印返回值

- 给定一个字符串,返回由开始的第一所有其他字符的一个新的字符串,所以“你好”产量“HLO”。

,我想出了一个解决方案在网上,但现在我想在理念运行,与主要方法,用扫描仪/ BufferedReader中输入从控制台等等看起来像我失去了一些东西......

import java.util.Scanner; 
public class Bat 
{ 
    public static void main (String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     String str = scanner.nextLine(); 
     printString(); 
     } 

    public String stringBits(String str) { 
     String result = ""; 
     for (int i = 0; i<str.length();i += 2) { 
      result += str.substring(i, i+1); 
     } 
     return result; 
    } 
    public static void printString() { 
     System.out.println(result); 
    } 
} 

我请你帮忙解决。该怎么做:

  1. 从控制台读一个字;
  2. 创建一个新的字符串;
  3. 打印出来。
+0

我投票作为题外话,因为我不知道答案是什么的问题做关闭这个问题 - 这都没有现在感觉。 –

+1

@ mohican93请不要在问题中包含给定的答案。只需点击左上角的复选标记即可接受解决问题的答案。这样未来的读者就知道该怎么做。 – luk2302

+0

工程师,放轻松,我是这里第一个几个小时,现在它已被编辑。 大家好,非常感谢您的支持和答复,它可以帮助我。如果有人想提供一些关于讨论主题的更多链接,我也会很感激。 – mohican93

回答

2

两种选择:

  • 使stringBitsstatic
  • 创建类Bat的实例,并调用成员方法

首先解决方案 - 简单,没有太大的改变

import java.util.Scanner; 

public class Bat { 
    public static void main (String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     String str = scanner.nextLine(); 
     printString(stringBits(str)); 
    } 

    public static String stringBits(String str) { 
     String result = ""; 
     for (int i = 0; i < str.length();i += 2) { 
      result += str.substring(i, i + 1); 
     } 
     return result; 
    } 

    public static void printString (String string) { 
     System.out.println(string); 
    } 
} 

二的解决方案 - 多一点进步

import java.util.Scanner; 

public class Bat { 

    private String string; 

    public Bat(String string) { 
     this.string = string; 
    } 

    public static void main (String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     String str = scanner.nextLine(); 

     Bat bat = new Bat(str); 
     bat.printStringBits(); 
    } 

    private String stringBits() { 
     String result = ""; 
     for (int i = 0; i < string.length(); i += 2) { 
      result += string.substring(i, i + 1); 
     } 
     return result; 
    } 

    public void printStringBits() { 
     System.out.println(stringBits()); 
    } 
} 
+0

luk! 非常感谢!第一种解决方案已被编译器接受,但它没有输出必要的结果,如“result - > rsl”,但只是再次输入了“result - result”结果。 但是第二个人工作得很出色,我喜欢这个。 我不想要求通过它的每个步骤并解释它 - 我已经很好了,只有用(str)作为参数创建一个新的Bat实例的部分仍然有点令人困惑,所以我想问问有没有关于它的更多信息的链接/来源?为什么,在哪些情况下等 – mohican93

+0

@ mohican93没有真正的链接跟进。我猜你现在正在经历某种教程或演讲?主题和技术可能会以任何方式进行讨论。它只是一个类,有一个私有成员和一个构造函数接受该参数的值。 – luk2302

1

您的结果变量只能从“stringBits”方法中访问。由于该方法返回一个字符串,你可以做以下打印出来:

System.out.println(stringBits(string)); //Call in main method in place of printString(); 

编辑:我的代码是不工作的例子。请注意,为了工作,stringBits必须是一个静态方法。

+0

谢谢,CConard96! 虽然我已经尝试过;据说stringBits()不能从非静态字段访问;那么我将String stringBits设置为static,这就是我得到的:stringBits不能应用于()。 编辑部分代码: public static String stringBits(String str){0} {0}结果String =“”;对于(int i = 0; i mohican93

+1

请编辑您的原始问题以添加代码,而不是将其发布在评论中。另外,你得到的问题是因为你没有将任何参数传递给'stringBits()'。你需要调用'stringBits(str)'。另外,'str',目前不能被'printString()'访问,所以你还需要将'str'传递给这个方法。 –