2013-10-09 2 views
0

Я использую метод сортировки пузырьков для сортировки входных чисел по порядку (наименьший до наибольшего), и я использую его по своему методу. Затем в следующем методе (где мне нужно иметь номера в порядке), похоже, игнорирует, что я отсортировал числа в предыдущем методе. Я не называю метод правильно или что? Спасибо!Почему мои переменные остаются в порядке от метода к методу?

import java.util.Scanner; 
public class hw6 { 
public static int getOrder(int n1, int n2, int n3, int n4, int n5) { 
    Scanner in = new Scanner(System.in); 

    if (n1>n2){ 
     int t = n1; 
     n1 = n2; 
     n2 =t; 
    } 
    if (n2>n3){ 
     int t = n2; 
     n2 = n3; 
     n3 =t; 
    } 
    if (n3>n4){ 
     int t = n3; 
     n3 = n4; 
     n4 =t; 
    } 
    if (n4>n5){ 
     int t = n4; 
     n4 = n5; 
     n5 =t; 
    } 
    if (n1>n2){ 
     int t = n1; 
     n1 = n2; 
     n2 =t; 
    } 
    if (n2>n3){ 
     int t = n2; 
     n2 = n3; 
     n3 =t; 
    } 
    if (n3>n4){ 
     int t = n3; 
     n3 = n4; 
     n4 =t; 
    } 
    if (n1>n2){ 
     int t = n1; 
     n1 = n2; 
     n2 =t; 
    } 
    if (n2>n3){ 
     int t = n2; 
     n2 = n3; 
     n3 =t; 
    } 
    if (n1>n2){ 
     int t = n1; 
     n1 = n2; 
     n2 =t; 
    } 
    System.out.println(n1+" "+n2+" "+n3+" "+n4+" "+n5); 

    return n1+n2+n3+n4+n5;//cards now in order from least to greatest 
} 
public static int getRank(int n1, int n2, int n3, int n4, int n5) { 
int order; 
int rank = 1; 
order = getOrder(n1, n2, n3, n4, n5); 

if (n1 == n2 && n1 == n3 && n1 == n4 || 
    n2 == n3 && n2 == n4 && n2 == n5) 
    System.out.println("Four of a kind"); 
else if (n1 == n2 && n1 == n3 && n4 == n5 || 
      n1 == n2 && n3 == n4 && n3 == n5) 
    System.out.println("Full house"); 
else if (n2 == n1+1 && n3 == n2+1 && n4 == n3+1 && n5 == n4+1) 
    System.out.println("Straight"); 
else if (n1 == n2 && n1 == n3 || n2 == n3 && n2 == n4 || 
      n3 == n4 && n3 == n5) 
    System.out.println("Three of a kind"); 
else 
    System.out.println("A high card"); 

return rank; 
}  
public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int n1, n2, n3, n4, n5; //input 
    int order; 
    int rank; 

    System.out.print("Enter (1-13):"); 
    n1 = in.nextInt(); 
    System.out.print("Enter (1-13):"); 
    n2 = in.nextInt(); 
    System.out.print("Enter (1-13):"); 
    n3 = in.nextInt(); 
    System.out.print("Enter (1-13):"); 
    n4 = in.nextInt(); 
    System.out.print("Enter (1-13):"); 
    n5 = in.nextInt(); 

    order = getOrder(n1, n2, n3, n4, n5); 
    rank = getRank(n1, n2, n3, n4, n5); 
} 

}

+0

Если честно, не совсем уверен. Это то, чему меня учили. Никогда не пробовал это иначе. – ToonLink

+0

Кстати, вам следует рассмотреть следующие соглашения о присвоении имен Java «Имя класса должно начинаться с заглавной буквы» – Prateek

ответ

2

Ява проходит по значению, поэтому метод getOrder получает копию значений. Локальные копии изменены, но исходные переменные от main не изменились.

Чтобы сохранить изменения, я бы создал массив или ArrayList, чтобы содержать значения. Затем передайте это вашему методу, чтобы изменить эти значения. Метод получит копию ссылки на массив или ArrayList, поэтому изменения будут сохраняться в объекте.

 Смежные вопросы

  • Нет связанных вопросов^_^