Java 我的交换方法不起作用。有人能帮我找出是什么问题吗?
好的,我的节目展示了孩子们上公共汽车,按照特定的顺序坐着。然后两个孩子交换座位,这样可以改变顺序。之后,两个孩子离开,另一个上了公共汽车。这就是程序所做的。除了我的交换方法,所有的东西都能找到。在我的交换方法中,两个孩子应该交换座位 代码如下:Java 我的交换方法不起作用。有人能帮我找出是什么问题吗?,java,Java,好的,我的节目展示了孩子们上公共汽车,按照特定的顺序坐着。然后两个孩子交换座位,这样可以改变顺序。之后,两个孩子离开,另一个上了公共汽车。这就是程序所做的。除了我的交换方法,所有的东西都能找到。在我的交换方法中,两个孩子应该交换座位 代码如下: public class Bus { private String names[] = new String[10]; public void getOn(String name) { int i = findFirstEmpty();
public class Bus
{
private String names[] = new String[10];
public void getOn(String name)
{
int i = findFirstEmpty();
if (i >= 0)
{
names[i] = name;
}
else
{
System.out.println("The bus is at maximum capacity");
}
}
public int findFirstEmpty()
{
for (int i = 0; i <= names.length; i++){
if (names[i] == null){
return i;
}
}
return -1;
}
public void print()
{
for (int i = 0; i < 10; i++)
{
if (names[i] != null){
System.out.println(i + " , " + names[i]);
}
}
}
public void getOff(String name)
{
for(int i=0;i<10;i++)
{
if (name.equals(names[i])){
names[i] = null;
}
}
}
public void swap(String name1, String name2)
{
String temp = name1;
name1 = name2;
name2 = temp;
}
public static void main(String[] args)
{
System.out.println("The bus pulls up and the children load onto it.");
System.out.println();
Bus bus = new Bus();
String name = "Joe";
bus.getOn(name);
name = "Jeff";
bus.getOn(name);
name = "Erica";
bus.getOn(name);
name = "Bob";
bus.getOn(name);
System.out.print("After loading the children onto the bus, this is who the bus contains: ");
System.out.println();
bus.print();
System.out.println();
bus.swap("Jeff", "Bob");
System.out.print("After swapping Jeff's and Bob's seats, this is who remains on the bus: ");
System.out.println();
bus.print();
System.out.println();
name = "Erica";
bus.getOff(name);
name = "Bob";
bus.getOff(name);
System.out.print("After Erica and Bob exited the bus, this is who remains: ");
System.out.println();
bus.print();
name = "Nancy";
bus.getOn(name);
System.out.println();
System.out.print("After Nancy enters the bus, this is who the bus contains: ");
System.out.println();
bus.print();
}
}
公共类总线
{
私有字符串名称[]=新字符串[10];
public void getOn(字符串名称)
{
int i=findFirsty();
如果(i>=0)
{
名称[i]=名称;
}
其他的
{
System.out.println(“总线处于最大容量”);
}
}
public int findFirstEntry()
{
对于(int i=0;i
在这里,您交换的是局部变量name1
和name2
的值。这不会影响names
数组,因此实际上没有任何作用
您需要实际访问名称
数组,找到名称1
和名称2
数组中的现有位置,并在数组中交换它们。您应该看看这里,记住字符串是不可变的
对象。Java不像C/C++那样可以通过引用传递对象。因此,为了交换两个对象,可以将名称字符串包装在名为Person
的类中,然后执行以下操作:
public void swap(Person p1, Person p2)
{
String temp = p1.name;
p1.name = p2.name;
p2.name = temp;
}
我建议使用StringBuilder对象
public void swap(StringBuilder name1, StringBuilder name2)
{
StringBuilder temp = name1;
name1 = name2;
name2 = temp;
}
因为Java严格按值传递,所以swap()方法内部完成的交换不会反映到调用方法 您可以按如下方式重新编写交换方法:
public void swap(String name1, String name2) {
int position1 = -1;
int position2 = -1;
for (int i = 0; i < 10; i++) {
if (name1.equals(names[i])) {
position1 = i;
}
if (name2.equals(names[i])) {
position2 = i;
}
}
if ( position1 != -1 && position2 != -1 ) {
String temp = names[position1];
names[position1] = names[position2];
names[position2] = temp;
}
}
公共无效交换(字符串名称1、字符串名称2){
int位置1=-1;
int位置2=-1;
对于(int i=0;i<10;i++){
if(name1.equals(names[i])){
位置1=i;
}
if(name2.equals(names[i])){
位置2=i;
}
}
如果(位置1!=-1和位置2!=-1){
字符串温度=名称[position1];
名称[position1]=名称[position2];
姓名[职位2]=临时职位;
}
}
在Java中进行数组交换的唯一方法如下:
public void swap(Object[] array, int i, int j) {
// TODO: validate i and j...
Object iVal = array[i];
array[i] = array[j];
array[j] = iVal;
}
没有其他方法可以解决这个问题。它有点笨拙,而且它不适用于内置类型(int、double、float、byte、char、long),而只适用于它们的盒装对应类型,需要内置类型的专用版本(就像在java.util.Arrays
中一样)
作为旁注,值得注意的是,
Object[]
是继承自Object
的所有对象数组的超类型,也就是说,String[]
是Object[]
的子类型,但是byte[]
不是。我们假设按照我写下的方式使用该方法,所以我不确定如何使它像这样工作。如果你不允许像在帖子中那样更改交换方法签名,那么在Java中就没有办法进行交换。确实有-查找数组中字符串的位置。嗯,这仍然只是交换cal引用。你是想以某种方式交换它们的内容吗?糟糕,是的,它应该使用replace()函数:/
public void swap(Object[] array, int i, int j) {
// TODO: validate i and j...
Object iVal = array[i];
array[i] = array[j];
array[j] = iVal;
}