01/10/2018, 15:20

Gặp rắc rối ở construction và method swap

Mình đang học java mình đang gặp rắc rối ở vụ swap , phương thức swap đặt trong 1 class qua một class mới có hàm main tạo ra đối tượng và gọi đến nó các cao nhân chỉ điểm.
Rac roi o ham swap no ko thuc thi theo y minh va copy mot mang contrucstion

import java.util.*;
public class Gach{
   private  Scanner sc =new Scanner(System.in);
   private  String MS , Mau;
   private   int SLVTH,CDVG,CNVG;
   private    long GB1H;
public Gach() {
	   MS = "";  Mau = "";SLVTH = 0 ;CDVG = 0 ; CNVG = 0 ;GB1H = 0; }
public Gach(String MS1, String Mau1, int SLVTH1 , int CDVG1,int CNVG1,long GB1H1) {
	   MS = MS1   ;Mau = Mau1;  SLVTH = SLVTH1;
	   CDVG = CDVG1    ;CNVG = CNVG1;   GB1H = GB1H1; }
public Gach(Gach copy) {
	   MS =copy.MS;    Mau = copy.Mau;   SLVTH = copy.SLVTH;  CDVG = copy.CDVG;
	   CNVG = copy.CNVG ;   GB1H = copy.GB1H ; }
public void nhapTT() {
	   System.out.print("Nhập vào MS ");
	   setMS(MS=sc.nextLine());
	   System.out.print("Nhập vào Màu ");
	   setMau(Mau=sc.nextLine());
	   System.out.print("Nhập vào số lượng viên gạch trên 1 hộp gạch ");
	   setSLVTH(SLVTH=sc.nextInt());
	   System.out.print("Nhập vào CDVG ");
	   setCDVG(CDVG=sc.nextInt());
	   System.out.print("Nhập vào CNVG ");
	   setCNVG(CNVG=sc.nextInt());
	   System.out.print("Nhập vào giá bán 1 hộp ");
	   setGB1H(GB1H = sc.nextLong());
	   sc.nextLine(); }
public void hienThi() {
	   System.out.println("-------Thông tin viên gạch---------");
	   System.out.println("MS: "+getMS());
	   System.out.println("Màu "+getMau());
	   System.out.println("SLVTH: "+getSLVTH());
	   System.out.println("CDVG: "+getCDVG());
	   System.out.println("CNVG: "+getCNVG());
	   System.out.println("GB1H: "+getGB1H());
   }
   
public String getMS() { return MS;}
public void setMS(String mS) { MS = mS; }
public String getMau() { return Mau; }
public void setMau(String mau) { Mau = mau ;}
public int getSLVTH() { return SLVTH; }
public void setSLVTH(int sLVTH) { SLVTH = sLVTH ;}
public int getCDVG() { return CDVG; }
public void setCDVG(int cDVG) { CDVG = cDVG; }
public int getCNVG() {return CNVG;}
public void setCNVG(int cNVG) {CNVG = cNVG;}
public long getGB1H() {return GB1H;}
public void setGB1H(long gB1H) {GB1H = gB1H;}
public float giaBanLe(){
	float gBL = (float) ((float)GB1H/SLVTH+(0.2*(float)GB1H/SLVTH));
	return gBL;}
public float SMax(){   
	float Smax;
	return  Smax = CNVG*CDVG*SLVTH ;}
public float soLuongHop(int D,int N){
	float soluonghop =  (float)((D*N / (float)(CNVG*CDVG))/(float)SLVTH);
	return soluonghop;}
public void sWap(Gach B){ 
   Gach A = new Gach(this);
   Gach temp = A;
   A = B;
   B = temp;}
}

Còn đây là class main

import java.util.*;
public class SDGach 
{ 
   public static Scanner sc = new Scanner(System.in);
   
   public static void main(String[] args)
   {       System.out.println("----------Mở Rộng-----------");
	       System.out.print("Nhập vào n viên gạch ");
	       int n ;n = sc.nextInt();
	       Gach First[] = new Gach[n]  ;long X ; 
	       for(int i = 0 ; i < n ; i++) {   
	 		   First[i] = new Gach();
	 		   System.out.println("Nhập thông tin vien gạch "+i+":");
	 		   X = sc.nextLong() ;
	 		   First[i].setGB1H(X);}
	           //////So sánh rùi sắp xếp
	 		   for (int i = 0 ; i < First.length - 1; i++) 
	               for (int j = i + 1; j < First.length; j++) 
	    		   if(First[i].getGB1H()>First[j].getGB1H())
	 	              First[i].sWap(First[j]);
	    		///In ra 
	    	    for(int i = 0 ; i < First.length;i++)
	            First[i].hienThi();
  }
}
Chẵn viết 17:24 ngày 01/10/2018

Rắc dối ở đây là gì vậy?

Vĩ Huỳnh viết 17:22 ngày 01/10/2018

Lẽ ra mình nên tạo hàm swap bên class chứa hàm main đó cậu nhưng mình lại làm bên class khác

Quân viết 17:22 ngày 01/10/2018

Uh, nhưng cụ thể rắc rối là gì

Vĩ Huỳnh viết 17:20 ngày 01/10/2018

ham swap ko chay duoc

Quân viết 17:31 ngày 01/10/2018

Không chạy được là ntn, crash, không ra kết quả mong muốn, kết quả sau khi chạy là gì, kết quả mong muốn là gì.

PS: bạn có vẻ thích đánh đố người khác nhỉ. Tất cả mọi người ở đây là những người giúp đỡ bạn chứ không phải phục vụ bạn nên mọi người có thể bỏ qua mà không giúp bạn đỡ do đó nếu muốn nhận được sự giúp đỡ thì bạn hãy cung cấp thông tin đầy đủ vào thị mới có thể giải quyết vấn đề cho bạn

Hung viết 17:22 ngày 01/10/2018

Chuyển swap thành static method.

public class Gach {
  public static swap(Gach[] arr, int first, int second) {
    Gach temp = arr[first];
    arr[first] = arr[second];
    arr[second] = temp;
  }
}
for ( ... )
  for ( ... )
    if ( ... )
      Gach.swap(First, i, j);
Vĩ Huỳnh viết 17:31 ngày 01/10/2018

Mình xin lỗi. Tại ko biết cách ăn nói lắm. Ko ra đc kết quả mong muốn á cậu

Vĩ Huỳnh viết 17:21 ngày 01/10/2018

Kết quả nó không thay đổi khi nhập bạn ơi,nó vẫn như ban đầu

Quân viết 17:26 ngày 01/10/2018

thật ra code của bạn sẽ k hoạt động, vì nó sẽ chẳng swap được.
@Vi_Huynh: trong java bạn k thể swap bằng cách trên được do trong java không cho phép truyền reference vào method

Hung viết 17:29 ngày 01/10/2018

Thanks bạn nhé, mình update lại rồi
Chủ thớt xem lại inner forif nữa. Vì bạn hỏi phần swap() nên mình chỉ trả lời swap()

Vĩ Huỳnh viết 17:25 ngày 01/10/2018

thật ra mình sửa được rùi thật ra là lỗi dễ mà ko biết đường mò
if và inner for ko có sai đây là đoạn code mình sửa

public void Swap(Gach a ,Gach b){
	Gach temp = new Gach();temp.setCDVG(a.getCDVG());temp.setCNVG(a.getCNVG());
	temp.setGB1H(a.getGB1H());temp.setMau(a.getMau());temp.setMS(a.getMS());
	temp.setSLVTH(a.getSLVTH());
	
	a.setCDVG(b.getCDVG());a.setCNVG(b.getCNVG());a.setGB1H(b.getGB1H());
	a.setMau(b.getMau());  a.setMS(b.getMS());    a.setSLVTH(b.getSLVTH());
	
	b.setCDVG(temp.getCDVG());b.setCNVG(temp.getCNVG());b.setGB1H(temp.getGB1H());
	b.setMau(temp.getMau());b.setMS(temp.getMS());b.setSLVTH(temp.getSLVTH());}
}

Còn đây là main

 for (int i = 0 ; i < First.length - 1; i++) 
	            for (int j = i + 1; j < First.length; j++) 
	    		   if(First[i].getGB1H()>First[j].getGB1H())
	    			   First[i].Swap(First[i],First[j]);
```
Quân viết 17:23 ngày 01/10/2018

Cái của bạn là copy property rồi, không hề có gì gọi là tráo đổi biến cả, nhưng không sao, chạy được là được, hoặc bạn có thể tham khảo code của @hungsteve

Vĩ Huỳnh viết 17:32 ngày 01/10/2018

thank bạn nhé, hổm xem hôm nay vào xem lại mới nhớ quên cảm ơn

Bài liên quan
0