我正在编写一个程序来整理两个文本字符串。例如,“google”和“chrome”变为“gcohorgmlee”(您可以假设字母长度相等)。
public class Collate {
String result;
String a;
String b;
public void main(String[] args) {
System.out.printf("Enter 1st word: ");
Scanner in1 = new Scanner(System.in);
a = in1.next();
System.out.printf("Enter second word: ");
Scanner in2 = new Scanner(System.in);
b = in2.next();
}
public String collate(String a, String b) {
String accumulator;
this.a = a;
this.b = b;
for (int i = 0; i < a.length(); i++) {
result += a.charAt(i);
result += b.charAt(i);
}
return (result);
}
}
但是我对如何拨打collate()
感到困惑。我是Java的新手,几乎不知道任何事情,所以一些指示和帮助将不胜感激!
答案 0 :(得分:2)
最简单的答案就是简单地说,使用collate(a, b)
并将值分配回变量或将其打印到屏幕上......
较长的答案结束相同,但首先指出你的程序目前不会实际运行......
public void main(String[] args){
不是您的计划的有效入口点。相反,它应该是public static void main(String[] args){
现在,如果你这样做,你最终会遇到一些编译器错误,说明你的应用程序的某些非静态部分无法从静态上下文中访问...
最简单的解决方案是为constructor
类提供Collate
,可以从main
调用...
public class Collate{
String result;
String a;
String b;
public void main(String[] args){
new Collate();
}
public Collate() {
System.out.printf("Enter 1st word: ");
Scanner in1 = new Scanner(System.in);
a = in1.next();
System.out.printf("Enter second word: ");
Scanner in2 = new Scanner(System.in);
b = in2.next();
String collation = collate(a, b);
System.out.println(collation);
}
public String collate(String a, String b){
String accumulator;
this.a = a;
this.b = b;
for(int i = 0; i < a.length(); i++)
{
result += a.charAt(i);
result += b.charAt(i);
}
return (result);
}
}
<强>更新强>
我似乎在责任上创造了一个很好的横冲直撞。虽然它可以说类的责任是询问用户他们想做什么和做什么,但也可以说这个类应该是自包含它的任务,例如......
public class Collate{
String result;
String a;
String b;
public void main(String[] args){
System.out.printf("Enter 1st word: ");
Scanner in1 = new Scanner(System.in);
a = in1.next();
System.out.printf("Enter second word: ");
Scanner in2 = new Scanner(System.in);
b = in2.next();
Collate collate = new Collate();
String collation = collate.collate(a, b);
System.out.println(collation);
new Collate();
}
public String collate(String a, String b){
String accumulator;
this.a = a;
this.b = b;
for(int i = 0; i < a.length(); i++)
{
result += a.charAt(i);
result += b.charAt(i);
}
return (result);
}
}
因为缺乏背景,所以找不到具体的解决方案......
答案 1 :(得分:2)
不要偏离其他答案,这是我的看法。
以下是我改变的内容:
collate
电话之外并没有多大意义。in2
。你应该只有1 Scanner
。accumulator
。没用过。main
更改为static
,否则Java不会将其视为切入点。collate
更改为static
,因为它不再依赖于任何类实例变量,static
允许main
直接调用它。result
初始化为空字符串。代码:
public class Collate {
public static void main(String[] args) {
Scanner in1 = new Scanner(System.in);
System.out.printf("Enter 1st word: ");
String a = in1.next();
System.out.printf("Enter second word: ");
String b = in1.next();
System.out.println(collate(a,b));
}
public static String collate(String a, String b) {
String result = "";
for (int i = 0; i < a.length(); i++) {
result += a.charAt(i);
result += b.charAt(i);
}
return result;
}
}
更有效的选择是使用StringBuilder
:
(尽管对于在生产环境之外编写的代码,甚至大多数生产代码也不太可能需要这样做)
public static String collate(String a, String b) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < a.length(); i++) {
result.append(a.charAt(i));
result.append(b.charAt(i));
}
return result.toString();
}
答案 2 :(得分:1)
现在,collate
正在使用属于String
类的特定实例的Collate
变量,但它确实不需要;它完成工作所需的所有信息都是作为参数传递的。由于实例变量(字段)Collate.a
和Collate.b
没有做任何有用的事情,您可以消除它们,而result
变量也仅在collate
内有用方法,所以你应该在那里声明它(这是accumulator
的用途,所以使用该变量;你需要将它设置为空字符串""
开始)。 (事实上,如果多次调用collate
,您当前的版本将会失败,因为它只会在前一个结果的末尾添加字符。)
您可以collate
static
,这意味着它不需要属于任何特定Collate
的信息,并直接从main
调用:
public static String collate(String a, String b) {
String accumulator = "";
for (int i = 0; i < a.length(); i++) {
accumulator += a.charAt(i);
accumulator += b.charAt(i);
}
return accumulator;
}
// in main
System.out.println(collate(a,b));
答案 3 :(得分:0)
所以......这个代码有几个问题。
您的成员变量a
和b
未声明为static
;因此,它们不能从main
引用(也应该是static
)。
使用本地变量而不是a
或b
(因此您不会混淆名称),并将它们保留在main
中。你也可以彻底摆脱成员变量。
public static void main(String... args) {
String firstWord; // takes the place of a
String secondWord; // takes the place of b
// code omitted for brevity
}
现在,要在课堂上调用该方法,您需要to instantiate a new instance of Collate
。
Collate col = new Collate();
要调用该方法,请使用该实例,并使用表示要置换的参数的collate()
调用System.out.println(col.<insert_method_here>(_which_was_a?, _which_was_b?));
。我会把填空的空白作为练习留给读者。
accumulator
最后,变量collate
存在于result
范围内,但accumulator
不存在。选择要附加的{{1}}。摆脱对成员变量的分配。
答案 4 :(得分:-1)
总而言之,这就是你需要的东西
package mypackage;
import java.util.Scanner;
public class Collate {
public static void main(String[] args) {
Scanner in1 = null;
Scanner in2 = null;
try {
System.out.printf("Enter 1st word: ");
in1 = new Scanner(System.in);
String a = in1.next();
System.out.printf("Enter second word: ");
in2 = new Scanner(System.in);
String b = in2.next();
System.out.println(new Collate().collate(a, b));
} finally {
in1.close();
in2.close();
}
}
public String collate(String a, String b) {
String result = "";
for (int i = 0; i < Math.max(a.length(), b.length()); i++) {
result += a.charAt(i);
result += b.charAt(i);
}
return (result);
}
}