![](/img/trans.png)
[英]Getting data from edittext when switchbox is enabled in Android using Java
[英]Switchbox routing with stack (java language)
我一直在從事有關Java中堆棧的大學作業,但似乎找不到該作業的幫助。 這是關於配電箱路由的,我需要使用堆棧進行此分配。 作業定於明天到期,但由於我只在尋找解決方案,而不是成績,因此無需着急回答。 由於問題不是用英語寫的,所以我將給出簡短的解釋。
配電箱包含4n針,配電箱的每一側都有n針。 僅當連接一對引腳的線中的任何一條都不相交時,開關盒才可布線。 輸入將是成對的連接引腳號。
我發現了一些可能的解決方案,但無法理解:1.該問題可以通過與括號匹配的算法類似的算法來解決。2.將引腳號放入堆棧和數組中並進行比較(這是最令人困惑的一個)
到目前為止,我的代碼(嘗試第二種算法):
import java.util.Scanner;
import java.util.Stack;
public class Tester {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int cases=sc.nextInt();
for(int i=0;i<cases;i++){
int pin=sc.nextInt();
SwitchBox box=new SwitchBox(pin);
for(int j=0;j<pin*4;j++){
box.add(sc.nextInt());
}
boolean res=box.isRoutable();
if(res){
System.out.println("routable");
}
else{
System.out.println("not routable");
}
}
}
static class SwitchBox{
Stack<Integer> pins;
int[] pairs;
int[] comparator;
public SwitchBox(int pin){
this.pins=new Stack<Integer>();
this.pairs=new int[(pin*4)];
this.comparator=new int[this.pairs.length];
}
public boolean isRoutable(){
Stack<Integer> s=new Stack<Integer>();
for(int i=0;i<pairs.length;i++){
pairs[i]=pins.peek();
s.push(pins.pop());
}
for(int i=pairs.length-1;i>=0;i--){
if(pairs[i]!=s.pop()){
return true;
}
}
return false;
}
public void add(int pinNum){
if(pins.isEmpty()){
pins.push(pinNum);
}
else{
Stack<Integer> temp=new Stack<Integer>();
int top=(int)pins.peek();
while(top>pinNum){
temp.push(pins.pop());
if(pins.isEmpty()) top=pinNum;
else top=(int)pins.peek();
}
pins.push(pinNum);
while(!temp.isEmpty()){
pins.push(temp.pop());
}
}
}
}
}
在您的add
方法中, else
塊是錯誤的。 我無法理解您想做什么,但您需要做下一件事
public void add(int pinNum) {
if (pins.isEmpty()) {
pins.push(pinNum);
} else {
Integer last = pins.peek();
if (last == pinNum) {
pins.pop();
} else {
pins.push(pinNum);
}
}
}
之后, isRoutable
方法只需要檢查pins
堆棧即可。 如果為空,則一切正常。 否則有相交的線。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.